mali-g610-offline-backup/README.md
2026-09-17 00:51:54 +02:00

699 lines
12 KiB
Markdown

__HASH__ Ripristino offline OpenCL + Vulkan — Orange Pi 5 Plus
## Scopo
Questa procedura ripristina la configurazione GPU funzionante utilizzando esclusivamente il backup:
__BT__
/root/mali-offline-backup/
__BT__
oppure una copia dello stesso backup proveniente da USB, disco esterno o altro computer.
La configurazione di riferimento è:
__BT__
Kernel Mali g21p0-01eac0
Firmware g21p0
Userspace Mali g24p0-00eac0
OpenCL 3.0
Vulkan 1.3.276
GPU Mali-G610
__BT__
La procedura non modifica:
- kernel
- DTB
- U-Boot
- partizioni di boot
__HASH__ Importante
Il backup contiene le librerie userspace Mali g24 già funzionanti e il firmware g21 compatibile con il kernel.
Non utilizzare un firmware g24 al posto del firmware g21.
---
__HASH__ 1. Requisiti
Il backup deve avere questa struttura:
__BT__
mali-offline-backup/
├── firmware/
│ └── mali_csffw.bin
├── libs/
│ ├── libmali-hook-injector.a
│ ├── libmali-hook.so.1.9.0
│ ├── libmali.so.1.9.0
│ └── mali/
│ ├── libEGL.so.1
│ ├── libgbm.so.1
│ ├── libGLESv1_CM.so.1
│ ├── libGLESv2.so.2
│ ├── libMaliOpenCL.so.1
│ ├── libMaliVulkan.so.1
│ └── libwayland-egl.so.1
├── linker/
│ └── 00-aarch64-mali.conf
├── opencl/
│ └── mali.icd
├── system/
│ └── mali-priority.sh
├── symlinks/
│ ├── libmali-hook.so
│ ├── libmali-hook.so.1
│ ├── libmali-valhall-g610-g24p0-x11-wayland-gbm.so
│ ├── libmali.so
│ └── libmali.so.1
├── vulkan/
│ └── mali.json
└── checksums.sha256
__BT__
---
__HASH__ 2. Posizione del backup
Se il backup è già presente:
__BT__
/root/mali-offline-backup
__BT__
impostare:
__BT__
BACKUP=/root/mali-offline-backup
__BT__
Se il backup è stato copiato da USB in un'altra posizione, modificare BACKUP di conseguenza.
Esempio:
__BT__
BACKUP=/media/orangepi/USB/mali-offline-backup
__BT__
Controllare:
__BT__
sudo find __BT__$BACKUP__BT__ -type f -printf '%P\n' | sort
__BT__
---
__HASH__ 3. Verificare il backup prima di installarlo
__BT__
sudo bash -c '
cd "$BACKUP" &&
sha256sum -c checksums.sha256
'
__BT__
Tutti i file devono risultare:
__BT__
OK
__BT__
Se anche un solo file risulta FAILED:
__BT__
STOP
__BT__
Non procedere con il ripristino.
---
__HASH__ 4. Controllare il kernel Mali
Prima di modificare qualsiasi file:
__BT__
uname -a
__BT__
Controllare il DDK Mali:
__BT__
dmesg | grep -E 'mali fb000000.gpu: (Kernel DDK|GPU identified|Probed as mali0)'
__BT__
Il kernel previsto deve utilizzare:
__BT__
g21p0-01eac0
__BT__
__HASH__ Non procedere se il kernel utilizza un DDK incompatibile senza prima verificare la compatibilità del firmware.
---
__HASH__ 5. Disabilitare il servizio firmware automatico
Controllare:
__BT__
systemctl is-enabled set-mali-firmware.service
__BT__
Deve risultare:
__BT__
disabled
__BT__
Se necessario:
__BT__
sudo systemctl disable set-mali-firmware.service
__BT__
Non avviare il servizio durante il ripristino.
---
__HASH__ 6. Creare un backup della configurazione attuale
Prima di sovrascrivere qualsiasi file:
__BT__
sudo mkdir -p /root/mali-before-offline-restore
__BT__
Salvare gli elementi principali:
__BT__
sudo cp -a /etc/OpenCL/vendors \
/root/mali-before-offline-restore/
sudo cp -a /etc/ld.so.conf.d/00-aarch64-mali.conf \
/root/mali-before-offline-restore/ 2>/dev/null || true
sudo cp -a /usr/share/vulkan/icd.d/mali.json \
/root/mali-before-offline-restore/ 2>/dev/null || true
sudo cp -L /lib/firmware/mali_csffw.bin \
/root/mali-before-offline-restore/mali_csffw.bin 2>/dev/null || true
__BT__
---
__HASH__ 7. Ripristinare il firmware g21
Creare la directory:
__BT__
sudo mkdir -p /lib/firmware/mali_csffw_g21p0
__BT__
Copiare il firmware:
__BT__
sudo cp -a "$BACKUP/firmware/mali_csffw.bin" \
/lib/firmware/mali_csffw_g21p0/mali_csffw.bin
__BT__
Creare il link attivo:
__BT__
sudo ln -sfn /lib/firmware/mali_csffw_g21p0/mali_csffw.bin \
/lib/firmware/mali_csffw.bin
__BT__
Verificare:
__BT__
readlink -f /lib/firmware/mali_csffw.bin
__BT__
Deve puntare a:
__BT__
/usr/lib/firmware/mali_csffw_g21p0/mali_csffw.bin
__BT__
Controllare SHA-256:
__BT__
sha256sum /lib/firmware/mali_csffw.bin
__BT__
Deve risultare:
__BT__
8e7c821a55ca1c345cc79f61243616dd25fc35b81f090946f302886d67712df5
__BT__
---
__HASH__ 8. Ripristinare le librerie Mali userspace
Creare la directory:
__BT__
sudo mkdir -p /usr/lib/aarch64-linux-gnu/mali
__BT__
Copiare le librerie Mali:
__BT__
sudo cp -a "$BACKUP/libs/mali/." \
/usr/lib/aarch64-linux-gnu/mali/
__BT__
Copiare le librerie principali:
__BT__
sudo cp -a \
"$BACKUP/libs/libmali-hook-injector.a" \
"$BACKUP/libs/libmali-hook.so.1.9.0" \
"$BACKUP/libs/libmali.so.1.9.0" \
/usr/lib/aarch64-linux-gnu/
__BT__
---
__HASH__ 9. Ripristinare i symlink
Copiare i symlink:
__BT__
sudo cp -a "$BACKUP/symlinks/." \
/usr/lib/aarch64-linux-gnu/
__BT__
Controllare:
__BT__
ls -l \
/usr/lib/aarch64-linux-gnu/libmali.so \
/usr/lib/aarch64-linux-gnu/libmali.so.1 \
/usr/lib/aarch64-linux-gnu/libmali-valhall-g610-g24p0-x11-wayland-gbm.so \
/usr/lib/aarch64-linux-gnu/libmali-hook.so \
/usr/lib/aarch64-linux-gnu/libmali-hook.so.1
__BT__
I collegamenti devono essere equivalenti a:
__BT__
libmali.so.1 -> libmali.so.1.9.0
libmali-valhall-g610-g24p0-x11-wayland-gbm.so -> libmali.so.1
libmali-hook.so -> libmali-hook.so.1
libmali-hook.so.1 -> libmali-hook.so.1.9.0
libmali.so -> libmali.so.1
__BT__
---
__HASH__ 10. Ripristinare la configurazione del linker
__BT__
sudo mkdir -p /etc/ld.so.conf.d
sudo cp -a \
"$BACKUP/linker/00-aarch64-mali.conf" \
/etc/ld.so.conf.d/00-aarch64-mali.conf
__BT__
Controllare:
__BT__
cat /etc/ld.so.conf.d/00-aarch64-mali.conf
__BT__
Deve contenere:
__BT__
/usr/lib/aarch64-linux-gnu/mali
__BT__
---
__HASH__ 11. Aggiornare il linker
__BT__
sudo ldconfig
__BT__
Se compare il warning:
__BT__
ldconfig: /lib/librknnrt.so is not a symbolic link
__BT__
il warning è indipendente da Mali.
---
__HASH__ 12. Ripristinare OpenCL
Creare la directory:
__BT__
sudo mkdir -p /etc/OpenCL/vendors
__BT__
Copiare l'ICD:
__BT__
sudo cp -a \
"$BACKUP/opencl/mali.icd" \
/etc/OpenCL/vendors/mali.icd
__BT__
Controllare:
__BT__
cat /etc/OpenCL/vendors/mali.icd
__BT__
Deve contenere:
__BT__
/usr/lib/aarch64-linux-gnu/mali/libMaliOpenCL.so.1
__BT__
__HASH__ Importante
Se esiste un vecchio ICD g13:
__BT__
/etc/OpenCL/vendors/mali-arm64.icd
__BT__
non deve essere attivo contemporaneamente, se si vuole riprodurre la configurazione di riferimento.
Spostarlo in un backup:
__BT__
if [ -f /etc/OpenCL/vendors/mali-arm64.icd ]; then
sudo mv /etc/OpenCL/vendors/mali-arm64.icd \
/root/mali-before-offline-restore/mali-arm64.icd.g13
fi
__BT__
---
__HASH__ 13. Ripristinare Vulkan
Creare la directory:
__BT__
sudo mkdir -p /usr/share/vulkan/icd.d
__BT__
Copiare l'ICD:
__BT__
sudo cp -a \
"$BACKUP/vulkan/mali.json" \
/usr/share/vulkan/icd.d/mali.json
__BT__
Controllare:
__BT__
cat /usr/share/vulkan/icd.d/mali.json
__BT__
Deve contenere un library_path equivalente a:
__BT__
libMaliVulkan.so.1
__BT__
---
__HASH__ 14. Ripristinare la configurazione Mali
__BT__
sudo mkdir -p /etc/profile.d
sudo cp -a \
"$BACKUP/system/mali-priority.sh" \
/etc/profile.d/mali-priority.sh
__BT__
Controllare:
__BT__
cat /etc/profile.d/mali-priority.sh
__BT__
---
__HASH__ 15. Aggiornare nuovamente il linker
__BT__
sudo ldconfig
__BT__
---
__HASH__ 16. Verifica OpenCL prima del reboot
__BT__
clinfo | grep -E \
'arm_release_ver|Number of platforms|Platform Version|Device Name'
__BT__
Configurazione attesa:
__BT__
arm_release_ver: g24p0-00eac0, rk_so_ver: 10
Number of platforms 1
Platform Version OpenCL 3.0 v1.g24p0-00eac0...
Device Name Mali-G610 r0p0
__BT__
---
__HASH__ 17. Verifica Vulkan prima del reboot
Utilizzare esplicitamente l'ICD Mali:
__BT__
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/mali.json \
vulkaninfo --summary
__BT__
Devono comparire:
__BT__
Mali-G610
DRIVER_ID_ARM_PROPRIETARY
apiVersion = 1.3.276
driverVersion = 24.0.0
__BT__
__HASH__ Nota
Un semplice vulkaninfo --summary può fallire con XCB se non è disponibile un server X. Il test con VK_ICD_FILENAMES è quello da utilizzare per verificare il driver.
---
__HASH__ 18. Verifica del firmware prima del reboot
__BT__
readlink -f /lib/firmware/mali_csffw.bin
sha256sum /lib/firmware/mali_csffw.bin
systemctl is-enabled set-mali-firmware.service
__BT__
Devono risultare:
__BT__
/usr/lib/firmware/mali_csffw_g21p0/mali_csffw.bin
8e7c821a55ca1c345cc79f61243616dd25fc35b81f090946f302886d67712df5
disabled
__BT__
__HASH__ Se il firmware non corrisponde allo SHA-256 previsto, NON riavviare.
---
__HASH__ 19. Riavvio
Se tutti i controlli precedenti sono corretti:
__BT__
sudo reboot
__BT__
---
__HASH__ 20. Verifica dopo il reboot
Controllare il kernel Mali:
__BT__
dmesg | grep -E \
'mali fb000000.gpu: (Kernel DDK|GPU identified|Probed as mali0|Loading Mali firmware|Mali firmware git_sha)'
__BT__
Devono essere presenti:
__BT__
Kernel DDK version g21p0-01eac0
GPU identified as 0x7 arch 10.8.6 r0p0 status 0
Probed as mali0
Mali firmware git_sha: 221d2b3e5f4cf47df6227ccb24c82c4e4baa986e
__BT__
---
__HASH__ 21. Verifica OpenCL dopo il reboot
__BT__
clinfo | grep -E \
'arm_release_ver|Number of platforms|Platform Version|Device Name'
__BT__
Atteso:
__BT__
arm_release_ver: g24p0-00eac0, rk_so_ver: 10
Number of platforms 1
Platform Version OpenCL 3.0 v1.g24p0-00eac0...
Device Name Mali-G610 r0p0
__BT__
---
__HASH__ 22. Verifica Vulkan dopo il reboot
__BT__
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/mali.json \
vulkaninfo --summary
__BT__
Atteso:
__BT__
Mali-G610
DRIVER_ID_ARM_PROPRIETARY
apiVersion = 1.3.276
driverVersion = 24.0.0
__BT__
---
__HASH__ 23. Verifica finale dell'integrità del backup
Il backup originale non deve essere modificato durante il ripristino.
Se il backup si trova ancora nella posizione originale:
__BT__
sudo bash -c '
cd "$BACKUP" &&
sha256sum -c checksums.sha256
'
__BT__
Tutti i file devono risultare OK.
---
__HASH__ 24. Problemi comuni
__HASH__ OpenCL mostra due piattaforme
Controllare:
__BT__
ls -l /etc/OpenCL/vendors/
__BT__
Se è presente il vecchio ICD g13:
__BT__
/etc/OpenCL/vendors/mali-arm64.icd
__BT__
spostarlo fuori dalla directory attiva.
__HASH__ Vulkan restituisce errore XCB
Utilizzare:
__BT__
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/mali.json \
vulkaninfo --summary
__BT__
__HASH__ Il firmware ha SHA-256 diverso
Non riavviare.
Ripristinare:
__BT__
sudo cp -a "$BACKUP/firmware/mali_csffw.bin" \
/lib/firmware/mali_csffw_g21p0/mali_csffw.bin
sudo ln -sfn /lib/firmware/mali_csffw_g21p0/mali_csffw.bin \
/lib/firmware/mali_csffw.bin
__BT__
Poi verificare nuovamente lo SHA-256.
__HASH__ clinfo restituisce zero piattaforme
Controllare:
__BT__
cat /etc/OpenCL/vendors/mali.icd
ls -l /usr/lib/aarch64-linux-gnu/mali/libMaliOpenCL.so.1
ldconfig -p | grep -i mali
__BT__
__HASH__ Non utilizzare apt autoremove
Il ripristino è offline e non richiede la rimozione automatica dei pacchetti.
---
__HASH__ 25. Rollback del ripristino
Prima del ripristino è stata creata:
__BT__
/root/mali-before-offline-restore/
__BT__
Se qualcosa non funziona, non modificare kernel, DTB o U-Boot.
Prima fermarsi e verificare:
__BT__
dmesg | grep -i mali
clinfo
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/mali.json vulkaninfo --summary
__BT__
Il backup originale rimane disponibile per un ulteriore tentativo.
---
__HASH__ 26. Stato finale desiderato
La configurazione finale deve essere:
__BT__
Kernel Mali g21p0-01eac0
Firmware g21p0
Userspace Mali g24p0-00eac0
GPU Mali-G610 r0p0
OpenCL 3.0
Vulkan 1.3.276
OpenCL platforms 1
__BT__
Il ripristino utilizza esclusivamente i file contenuti nel backup e non richiede il download del pacchetto Mali g24 originale.