Android 11 introduce il concetto di immagine kernel generica e di partizione di avvio del fornitore. La partizione di avvio del fornitore memorizza i moduli del kernel compatibili con GKI e viene caricata dalla prima fase init. Anche i moduli kernel precedenti al rilascio di Android 11 vengono archiviati in partizioni fornitore e ODM e vengono caricati dai processi del fornitore.
Per Android 11 o versioni successive, il kernel e tutti i moduli del kernel possono essere aggiornati indipendentemente dal resto delle partizioni. Per abilitare gli aggiornamenti per i moduli del kernel archiviati nella partizione del fornitore (senza un aggiornamento della partizione del fornitore), spostare tutti i moduli della partizione del fornitore in una nuova partizione denominata Vendor DLKM (modulo del kernel caricabile dinamicamente). È quindi possibile aggiornare questa partizione in modo indipendente. Allo stesso modo, puoi spostare tutti i moduli del kernel archiviati nella partizione ODM in una nuova partizione chiamata ODM DLKM . Questa partizione può anche essere aggiornata in modo indipendente.
Posizione della partizione
Le partizioni vendor_dlkm
e odm_dlkm
si trovano nella super partizione come un'altra partizione dinamica.
contenuto di vendor_dlkm in /vendor/lib/modules
- Moduli del kernel del fornitore
- file di configurazione
modprobe
- Un file
modules.load
odm_dlkm contenuto in /odm/lib/modules
- Moduli del kernel ODM
- file di configurazione
modprobe
- Un file
modules.load
Vedi Supporto del modulo kernel per ulteriori dettagli sui file di configurazione del modulo kernel.
Costruisci supporto
La creazione di vendor_dlkm
e odm_dlkm
è un processo simile alla creazione di altre partizioni dinamiche.
Esempio di compilazione fornitore_dlkm
Costruisci vendor_dlkm
come mostrato nell'esempio seguente.
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 aggiornamento. Il gruppo di aggiornamento dovrebbe 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. Cambia i flag in base al dispositivo. Utilizzare la 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 creazione di odm_dlkm
Costruisci odm_dlkm
come mostrato nell'esempio seguente.
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 seguente voce per odm_dlkm
a fstab. Cambia i flag in base al dispositivo. Utilizzare il CL Aggiungi odm_dlkm
a CF come esempio.
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Copia dei moduli del kernel in una partizione
Per selezionare i moduli del kernel che desideri copiare nella partizione vendor_dlkm
, elencali in BOARD_VENDOR_KERNEL_MODULES
.
Se vuoi sovrascrivere il contenuto di modules.load
, puoi specificarlo in BOARD_VENDOR_KERNEL_MODULES_LOAD
.
In fase di compilazione, i moduli elencati in BOARD_VENDOR_KERNEL_MODULES
vengono installati in $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules
. Viene creato un collegamento simbolico in /vendor/lib/modules
che porta a /vendor_dlkm/lib/modules
.
Allo stesso modo, per selezionare i moduli del kernel che desideri copiare nella partizione odm_dlkm
, elencali in BOARD_ODM_KERNEL_MODULES
. La build della piattaforma esegue depmod
sui moduli e copia i file di output depmod
nell'immagine. La build crea un file modules.load
e lo memorizza nell'immagine. Questo file contiene tutti i moduli elencati in BOARD_ODM_KERNEL_MODULES
.
Se vuoi sovrascrivere il contenuto di modules.load
, puoi specificarlo in BOARD_ODM_KERNEL_MODULES_LOAD
.
In fase di compilazione, i moduli elencati in BOARD_ODM_KERNEL_MODULES
verranno installati in $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
. Verrà creato un collegamento simbolico in /odm/lib/modules
che porta a /odm_dlkm/lib/modules
.
Utilizzare sempre /vendor/lib/modules
e /odm/lib/modules
per i moduli del 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 è problematico poiché /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 poiché /odm_dlkm/lib/modules
non esiste.
Montaggio della partizione e caricamento dei moduli
Durante first_stage_init
, le partizioni vendor_dlkm
e odm_dlkm
vengono montate rispettivamente nelle partizioni /vendor_dlkm
e /odm_dlkm
. Quando ciò accade, i collegamenti simbolici a /vendor/lib/modules
e /odm/lib/modules
diventano disponibili.
Un processo del fornitore (come uno script '.rc') può quindi caricare i moduli del kernel in base all'ordine specificato in modules.load
. Se necessario, il processo del fornitore può caricare i moduli anche in un secondo momento.
Documentazione correlata
Per la documentazione riguardante la creazione di una partizione di avvio del fornitore (che contiene il RAMDisk del fornitore), fare riferimento a Kernel Module Support .