Les GKI et les modules GKI peuvent être mis à jour indépendamment du reste de la partition, car les modules GKI résident sur une partition dynamique distincte dans la super image appelée system_dlkm
. Les modules GKI sont signés par Google à l'aide du kernel
de clés de compilation et ne sont compatibles
qu'avec le GKI avec lequel elles sont compilées.
Il n'y a pas de stabilité d'ABI entre les modules GKI et GKI. pour les modules à charger
correctement pendant l'exécution, les modules GKI et GKI doivent être créés et mis à jour
ensemble.
Implémenter la compatibilité avec les partitions system_dklm
La partition system_dlkm
se trouve dans la super partition en tant qu'autre partition dynamique. Cette partition peut contenir les éléments suivants :
- Modules de noyau signés au moment de la compilation Google
depmod
artifacts
Créer system_dlkm
Le processus de création d'system_dlkm
est semblable à celui utilisé pour créer d'autres
des partitions. Procédez comme suit pour ajouter system_dlkm
à votre build:
Dans
BoardConfig.mk
, ajoutez les entrées suivantes :BOARD_USES_SYSTEM_DLKMIMAGE := true BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE) TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
Dans la liste des partitions, ajoutez
system_dlkm
:BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm
(Facultatif) Pour les appareils A/B et virtuels A/B, ajoutez la ligne suivante dans le champ
device.mk
pour votre appareil:AB_OTA_PARTITIONS += system_dlkm
Identifier les modules du noyau à copier dans system_dlkm
Pour que les modules se chargent correctement au moment de l'exécution, les modules GKI et GKI doivent être créés
ensemble. Vous devez donc identifier les modules du noyau dans le build GKI pour
architecture cible et fournissez-la comme source pour la partition system_dlkm
lors de la création de la plate-forme.
Pour Android 13
Faire pointer BOARD_SYSTEM_DLKM_SRC
vers un dossier contenant les modules GKI requis
les fichiers d'objets du noyau pour l'appareil en tant qu'entrée dans le système de compilation afin de générer
la partition system_dlkm
. Exemple :
Fournissez la source des modules GKI dans un dossier et faites pointer BOARD_SYSTEM_DLKM_SRC
vers
dans ce dossier. Exemple :
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
Au moment de la compilation, les modules répertoriés dans BOARD_SYSTEM_DLKM_SRC
sont installés dans
$ANDROID_PRODUCT_OUT/system_dlkm
Pour Android 14
Nous avons simplifié l'implémentation à l'aide des macros
(BOARD_*_KERNEL_MODULES
) est utilisé pour d'autres
Partitions *_dlkm
. La liste des modules GKI requis pour l'appareil doit être
référencée par la macro BOARD_SYSTEM_KERNEL_MODULES
. Au moment de la compilation, ces modules
sont installées dans $ANDROID_PRODUCT_OUT/system_dlkm
. Tous les modules de
Partition vendor_dlkm
qui a des dépendances sur les modules de system_dlkm
génère les références appropriées dans le fichier modules.dep
pour
vendor_dlkm
. En raison des dépendances entre partitions représentées
par modules.dep
, lorsqu'un
le module du fournisseur est chargé, tout module GKI requis est chargé automatiquement.
Par exemple, pour installer tous les modules GKI sur la partition system_dlkm
pour le noyau 5.15
GKI arm64
à partir de précompilés :
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
Installer system_dlkm
au moment de l'exécution
Selon le système de fichiers utilisé en tant que
système de fichiers en lecture seule, ajoutez
Procédez comme suit dans votre fichier fstab
pour installer la partition system_dlkm
au moment de l'exécution:
ext4
en tant que système de fichiers en lecture seule
system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
erofs
en tant que système de fichiers en lecture seule
system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb
Montage de partition et chargement de modules
Pendant first_stage_init
, la partition system_dlkm
est installée dans le
/system_dlkm
en tant que système de fichiers en lecture seule. En cas de montage réussi,
les liens de /system/lib/modules
pointant vers /system_dlkm/lib/modules
sont
disponibles.
Un processus fournisseur, tel qu'un script .rc
, peut ensuite charger les modules du noyau.
en fonction de l'ordre spécifié dans modules.load
. Le processus fournisseur
doit utiliser
le lien symbolique /system/lib/modules
pour charger les modules.
Si nécessaire, le processus fournisseur peut également charger les modules ultérieurement.
SELinux
Chaque fichier de la partition system_dlkm
est étiqueté avec le contexte de fichier de
system_dlkm_file
Pour charger le fichier des modules GKI dans la partition system_dlkm
,
le processus fournisseur responsable du chargement des modules a besoin d'un sepolicy
dans
le domaine du fournisseur.
Par exemple, dlkm_loader
utilisé par Cuttlefish pour charger des modules GKI possède le
les autorisations suivantes dans le fichier de stratégie à l'adresse
shared/sepolicy/vendor/dlkm_loader.te
:
allow dlkm_loader self:capability sys_module;
allow dlkm_loader system_dlkm_file:dir r_dir_perms;
allow dlkm_loader system_dlkm_file:file r_file_perms;
allow dlkm_loader system_dlkm_file:system module_load;
Valider la partition system-dlkm
Google fournit un scénario de test VTS GKI pour vérifier la partition system_dlkm
. À
appelez manuellement le test, utilisez la commande atest
suivante:
atest -c vts_dlkm_partition_test