Android 11 introduit le concept d'image de noyau générique et de partition de démarrage du fournisseur. La partition de démarrage du fournisseur stocke les modules du noyau compatibles avec GKI et est chargée par l'initialisation de première étape. Les modules de noyau antérieurs à la sortie d'Android 11 sont également stockés dans les partitions du fournisseur et ODM, et sont chargés par les processus du fournisseur.
Pour Android 11 ou version ultérieure, le noyau et tous les modules du noyau peuvent être mis à jour indépendamment du reste des partitions. Pour activer les mises à jour des modules de noyau stockés dans la partition fournisseur (sans mise à jour de la partition fournisseur), déplacez tous les modules de partition fournisseur vers une nouvelle partition appelée Vendor DLKM (module de noyau chargeable 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 des partitions
Les partitions vendor_dlkm
et odm_dlkm
sont situées dans la super partition en tant qu'autre partition dynamique.
Contenu de supplier_dlkm dans /vendor/lib/modules
- Modules de noyau du fournisseur
- fichiers de configuration
modprobe
- Un fichier
modules.load
Contenu d'odm_dlkm dans /odm/lib/modules
- Modules du noyau ODM
- fichiers de configuration
modprobe
- Un fichier
modules.load
Voir Prise en charge du module noyau pour plus de détails sur les fichiers de configuration du module noyau.
Créer du soutien
La création de vendor_dlkm
et odm_dlkm
est un processus similaire à la création d'autres partitions dynamiques.
exemple de construction de supplier_dlkm
Créez vendor_dlkm
comme indiqué dans l'exemple ci-dessous.
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 mise à jour. Le groupe de mise à jour doit être le groupe dans lequel se trouve 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. Changez les drapeaux en fonction de l'appareil. Utilisez CL Add vendor_dlkm
to CF comme exemple.
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Exemple de construction odm_dlkm
Créez odm_dlkm
comme indiqué dans l'exemple ci-dessous.
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. Changez les drapeaux en fonction de l'appareil. Utilisez le CL Add odm_dlkm
to CF comme exemple.
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Copie des 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 construction, 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éé dans /vendor/lib/modules
qui 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
, répertoriez-les dans BOARD_ODM_KERNEL_MODULES
. La construction de la plateforme exécute depmod
sur les modules et copie les fichiers de sortie depmod
dans l'image. La build crée un fichier modules.load
et le stocke dans l'image. Ce fichier contient tous les modules répertorié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 construction, les modules répertoriés dans BOARD_ODM_KERNEL_MODULES
seront installés dans $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
. Un lien symbolique sera créé dans /odm/lib/modules
qui mène à /odm_dlkm/lib/modules
.
Utilisez toujours /vendor/lib/modules
et /odm/lib/modules
pour les modules du fournisseur et du noyau ODM.
N'utilisez jamais /vendor_dlkm/lib/modules. Les appareils sans partition vendor_dlkm
installent BOARD_VENDOR_KERNEL_MODULES
directement dans /vendor/lib/modules
. C'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 dans /odm/lib/modules
. C'est problématique car /odm_dlkm/lib/modules
n'existe pas.
Montage de partitions et chargement de modules
Pendant first_stage_init
, les partitions vendor_dlkm
et odm_dlkm
sont montées respectivement dans les partitions /vendor_dlkm
et /odm_dlkm
. Lorsque cela se produit, les liens symboliques vers /vendor/lib/modules
et /odm/lib/modules
deviennent disponibles.
Un processus fournisseur (comme un script '.rc') peut ensuite charger les modules du noyau en fonction de l'ordre spécifié dans modules.load
. Le processus fournisseur peut également charger les modules ultérieurement, si nécessaire.
Documentation associée
Pour obtenir de la documentation concernant la création d'une partition de démarrage du fournisseur (qui contient le RAMDisk du fournisseur), reportez-vous à Kernel Module Support .