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

11 KiB

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.