Android 11 introduit le concept d'image de kernel générique et de partition de démarrage du fournisseur. La partition de démarrage du fournisseur stocke les modules de noyau compatibles avec GKI et est chargée par l'initialisation de la première étape. Les modules du noyau antérieurs à la version d'Android 11 sont également stockés dans des partitions de fournisseurs et d'ODM, et sont chargés par des processus de fournisseurs.
Pour Android 11 ou version ultérieure, le noyau et tous ses modules peuvent être mis à jour indépendamment du reste des partitions. Pour activer les mises à jour des modules de kernel stockés dans la partition du fournisseur (sans mise à jour de la partition du fournisseur), déplacez tous les modules de la partition du fournisseur vers une nouvelle partition appelée Vendor DLKM (module de kernel pouvant être chargé dynamiquement). Vous pouvez ensuite mettre à jour cette partition indépendamment. De même, vous pouvez déplacer tous les modules du noyau stockés dans la partition ODM vers une nouvelle partition appelée ODM DLKM. Cette partition peut également être mise à jour indépendamment.
Emplacement de la partition
Les partitions vendor_dlkm
et odm_dlkm
se trouvent dans la super partition en tant qu'autre partition dynamique.
Contenu "vendor_dlkm" dans /vendor/lib/modules
- Modules du noyau du fournisseur
modprobe
fichiers de configuration- Un fichier
modules.load
Contenus odm_dlkm dans /odm/lib/modules
- Modules du noyau ODM
- Fichiers de configuration
modprobe
- Un fichier
modules.load
Pour en savoir plus sur les fichiers de configuration des modules du kernel, consultez la section Compatibilité avec les modules du kernel.
Assistance de compilation
La création de vendor_dlkm
et de odm_dlkm
est un processus semblable à la création d'autres partitions dynamiques.
Exemple de compilation provider_dlkm
Compilez vendor_dlkm
comme indiqué dans les exemples suivants.
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
Remplacez <GROUP_NAME>
par le nom approprié du groupe de mises à jour. Le groupe de mise à jour doit être celui de la partition du fournisseur.
Pour les appareils A/B et virtuels A/B, device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
Ajoutez l'entrée suivante pour vendor_dlkm
à fstab. Modifiez les indicateurs en fonction de l'appareil. Utilisez l'exemple de commande Ajouter vendor_dlkm
à CF.
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Exemple de compilation odm_dlkm
Créez odm_dlkm
comme indiqué dans les exemples suivants.
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
Pour les appareils A/B et virtuels A/B, device.mk
AB_OTA_PARTITIONS += odm_dlkm
fstab
Ajoutez l'entrée suivante pour odm_dlkm
à fstab. Modifiez les indicateurs en fonction de l'appareil. Utilisez l'exemple de commande Ajouter odm_dlkm
à CF.
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Copier les modules du noyau dans une partition
Pour sélectionner les modules du noyau que vous souhaitez copier dans la partition vendor_dlkm
, répertoriez-les dans BOARD_VENDOR_KERNEL_MODULES
.
Si vous souhaitez remplacer le contenu de modules.load
, vous pouvez le spécifier dans BOARD_VENDOR_KERNEL_MODULES_LOAD
.
Au moment de la compilation, les modules répertoriés dans BOARD_VENDOR_KERNEL_MODULES
sont installés dans $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules
. Un lien symbolique est créé à /vendor/lib/modules
et mène à /vendor_dlkm/lib/modules
.
De même, pour sélectionner les modules du noyau que vous souhaitez copier dans la partition odm_dlkm
, listez-les dans BOARD_ODM_KERNEL_MODULES
. La compilation de la plate-forme exécute depmod
sur les modules et copie les fichiers de sortie depmod
dans l'image.
La compilation crée un fichier modules.load
et le stocke dans l'image.
Ce fichier contient tous les modules listés dans BOARD_ODM_KERNEL_MODULES
.
Si vous souhaitez remplacer le contenu de modules.load
, vous pouvez le spécifier dans BOARD_ODM_KERNEL_MODULES_LOAD
.
Au moment de la compilation, les modules listés dans BOARD_ODM_KERNEL_MODULES
sont installés dans $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
. Un lien symbolique est créé à /odm/lib/modules
et mène à /odm_dlkm/lib/modules
.
Utilisez toujours /vendor/lib/modules
et /odm/lib/modules
pour les modules de kernel du fournisseur et de l'ODM.
N'utilisez jamais /vendor_dlkm/lib/modules. Les appareils sans partition vendor_dlkm
installent BOARD_VENDOR_KERNEL_MODULES
directement sur /vendor/lib/modules
. Ce problème est problématique, car /vendor_dlkm/lib/modules
n'existe pas.
N'utilisez jamais /odm_dlkm/lib/modules
. Les appareils sans partition odm_dlkm
installent BOARD_ODM_KERNEL_MODULES
directement sur /odm/lib/modules
. Cela pose problème, car /odm_dlkm/lib/modules
n'existe pas.
Montage de la partition et chargement du module
Lors de first_stage_init
, les partitions vendor_dlkm
et odm_dlkm
sont montées dans les répertoires /vendor_dlkm
et /odm_dlkm
, respectivement. Dans ce cas, les liens symboliques à /vendor/lib/modules
et /odm/lib/modules
deviennent disponibles.
Un processus du fournisseur (comme un script .rc
) peut ensuite charger les modules du kernel en fonction de l'ordre spécifié dans modules.load
. Le processus du fournisseur peut également charger les modules ultérieurement, si nécessaire.
Documentation associée
Pour en savoir plus sur la création d'une partition de démarrage du fournisseur (qui contient le RAMDisk du fournisseur), consultez la section Compatibilité avec le module du kernel.