Partizioni DLKM del fornitore e ODM

Android 11 introduce il concetto di immagine del kernel generico e la partizione di avvio del fornitore. La partizione di avvio del fornitore archivia i moduli kernel compatibili con GKI e viene caricata tramite init della prima fase. Anche i moduli del kernel prima del rilascio di Android 11 vengono archiviati in partizioni dei fornitori e ODM e vengono caricati dai processi del fornitore.

Per Android 11 o versioni successive, il kernel e tutti i suoi moduli possono essere aggiornati indipendentemente dal resto delle partizioni. Per attivare gli aggiornamenti per i moduli del kernel memorizzati nella partizione del fornitore (senza un aggiornamento della partizione del fornitore), sposta tutti i moduli della partizione del fornitore in una nuova partizione denominata Vendor DLKM (modulo del kernel caricabile dinamicamente). A questo punto puoi aggiornare questa partizione in modo indipendente. Analogamente, puoi spostare tutti i moduli del kernel memorizzati nella partizione ODM in una nuova partizione denominata ODM DLKM. Questa partizione può essere aggiornata anche in modo indipendente.

Posizione della partizione

Le partizioni vendor_dlkm e odm_dlkm si trovano nella superpartizione come un'altra partizione dinamica.

Contenuti di vendor_dlkm in /vendor/lib/modules

  • Moduli kernel del fornitore
  • File di configurazione modprobe
  • Un file modules.load

Contenuti di odm_dlkm in /odm/lib/modules

  • Moduli del kernel ODM
  • File di configurazione modprobe
  • Un file modules.load

Per ulteriori dettagli sui file di configurazione dei moduli del kernel, consulta Supporto dei moduli del kernel.

Creare assistenza

La creazione di vendor_dlkm e odm_dlkm è un processo simile a quello di altre partizioni dinamiche.

Esempio di compilazione di vendor_dlkm

Crea vendor_dlkm come mostrato negli esempi seguenti.

BoardConfig.mk

BOARD_USES_VENDOR_DLKMIMAGE := true
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm
BOARD_<GROUP_NAME>_PARTITION_LIST += vendor_dlkm

Sostituisci <GROUP_NAME> con il nome appropriato del gruppo di aggiornamenti. Il gruppo di aggiornamento deve essere il gruppo in cui si trova la partizione del fornitore.

Per i dispositivi A/B e A/B virtuali, device.mk

AB_OTA_PARTITIONS += vendor_dlkm

fstab

Aggiungi la seguente voce per vendor_dlkm a fstab. Modifica i flag in base al dispositivo. Utilizza l'CL Aggiungi vendor_dlkm a CF come esempio.

vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

Esempio di compilazione di odm_dlkm

Crea odm_dlkm come mostrato nei seguenti esempi.

BoardConfig.mk

BOARD_USES_ODM_DLKIMAGE := true
BOARD_ODM_DLKIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_ODM_DLKM := odm_dlkm
BOARD_<group_name>_PARTITION_LIST += odm_dlkm

Per i dispositivi A/B e A/B virtuali, device.mk

AB_OTA_PARTITIONS += odm_dlkm

fstab

Aggiungi la voce seguente per odm_dlkm a fstab. Modifica i flag in base al dispositivo. Utilizza l'interfaccia a riga di comando Aggiungere odm_dlkm a CF come esempio.

odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

copia i moduli kernel in una partizione

Per selezionare i moduli del kernel da copiare nella partizione vendor_dlkm, elencali in BOARD_VENDOR_KERNEL_MODULES.

Se vuoi sostituire i contenuti di modules.load, puoi specificarlo in BOARD_VENDOR_KERNEL_MODULES_LOAD.

Al momento della compilazione, i moduli elencati in BOARD_VENDOR_KERNEL_MODULES vengono installati in $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules. Viene creato un link simbolico in /vendor/lib/modules che rimanda a /vendor_dlkm/lib/modules.

Allo stesso modo, per selezionare i moduli kernel che vuoi copiare nella partizione odm_dlkm, elencali in BOARD_ODM_KERNEL_MODULES. La compilazione della piattaforma esegue depmod sui moduli e copia i file di output depmod nell'immagine. La compilazione crea un file modules.load e lo memorizza nell'immagine. Questo file contiene tutti i moduli elencati in BOARD_ODM_KERNEL_MODULES.

Se vuoi eseguire l'override dei contenuti di modules.load, puoi specificarlo in BOARD_ODM_KERNEL_MODULES_LOAD.

Al momento della compilazione, i moduli elencati in BOARD_ODM_KERNEL_MODULES vengono installati in $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules. Viene creato un link simbolico in /odm/lib/modules che rimanda a /odm_dlkm/lib/modules.

Usa sempre /vendor/lib/modules e /odm/lib/modules per i moduli kernel del fornitore e ODM.

Non utilizzare mai /vendor_dlkm/lib/modules. I dispositivi senza una partizione vendor_dlkm installano BOARD_VENDOR_KERNEL_MODULES direttamente su /vendor/lib/modules. Questo è un problema, in quanto /vendor_dlkm/lib/modules non esiste.

Non utilizzare mai /odm_dlkm/lib/modules. I dispositivi senza una partizione odm_dlkm installano BOARD_ODM_KERNEL_MODULES direttamente su /odm/lib/modules. Questo è problematico perché /odm_dlkm/lib/modules non esiste.

Montaggio delle partizioni e caricamento dei moduli

Durante first_stage_init, le partizioni vendor_dlkm e odm_dlkm vengono montate rispettivamente nelle directory /vendor_dlkm e /odm_dlkm. In questo caso, diventano disponibili i link simbolici in /vendor/lib/modules e /odm/lib/modules.

Un processo del fornitore (ad esempio uno script .rc) può quindi caricare i moduli del kernel in base all'ordine specificato in modules.load. Il processo del fornitore può anche caricare i moduli in un secondo momento, se necessario.

Per la documentazione relativa alla creazione di una partizione vendor-boot (che contiene il RAMDisk del fornitore), consulta Supporto del modulo del kernel.