| firmware | ||
| libs | ||
| linker | ||
| opencl | ||
| symlinks | ||
| system | ||
| vulkan | ||
| checksums.sha256 | ||
| README.md | ||
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.