Partition fournisseur/ODM DLKM

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.

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 .