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