Android 11 führt das Konzept des generischen Kernel-Images und der Hersteller-Boot-Partition ein. Die Hersteller-Boot-Partition speichert mit GKI kompatible Kernel-Module und wird von der ersten Init-Stufe geladen. Kernelmodule vor der Veröffentlichung von Android 11 werden ebenfalls in Hersteller- und ODM-Partitionen gespeichert und von Herstellerprozessen geladen.
Für Android 11 oder höher können der Kernel und alle Kernelmodule unabhängig von den übrigen Partitionen aktualisiert werden. Um Aktualisierungen für Kernelmodule zu ermöglichen, die in der Herstellerpartition gespeichert sind (ohne Aktualisierung der Herstellerpartition), verschieben Sie alle Anbieterpartitionsmodule in eine neue Partition namens Vendor DLKM (dynamisch ladbares Kernelmodul). Sie können diese Partition dann unabhängig aktualisieren. Ebenso können Sie alle in der ODM-Partition gespeicherten Kernelmodule in eine neue Partition namens ODM DLKM verschieben. Diese Partition kann auch unabhängig aktualisiert werden.
Partitionsspeicherort
Die Partitionen vendor_dlkm
und odm_dlkm
befinden sich in der Superpartition als weitere dynamische Partition.
Vendor_dlkm-Inhalte in /vendor/lib/modules
- Kernelmodule des Anbieters
-
modprobe
Konfigurationsdateien - Eine
modules.load
Datei
odm_dlkm-Inhalt in /odm/lib/modules
- ODM-Kernelmodule
-
modprobe
Konfigurationsdateien - Eine
modules.load
Datei
Weitere Informationen zu Kernelmodul-Konfigurationsdateien finden Sie unter Kernelmodulunterstützung .
Unterstützung aufbauen
Das Erstellen vendor_dlkm
und odm_dlkm
ist ein ähnlicher Prozess wie das Erstellen anderer dynamischer Partitionen.
build-Beispiel „vendor_dlkm“.
Erstellen Sie vendor_dlkm
wie im folgenden Beispiel gezeigt.
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
Ersetzen Sie <GROUP_NAME>
durch den entsprechenden Namen der Update-Gruppe. Die Update-Gruppe sollte die Gruppe sein, in der sich die Herstellerpartition befindet.
Für A/B- und Virtual A/B-Geräte: device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
Fügen Sie den folgenden Eintrag für vendor_dlkm
zur fstab hinzu. Ändern Sie die Flags je nach Gerät. Verwenden Sie als Beispiel die CL vendor_dlkm
zu CF hinzufügen“ .
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
odm_dlkm-Build-Beispiel
Erstellen Sie odm_dlkm
wie im folgenden Beispiel gezeigt.
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
Für A/B- und Virtual A/B-Geräte: device.mk
AB_OTA_PARTITIONS += odm_dlkm
fstab
Fügen Sie den folgenden Eintrag für odm_dlkm
zur fstab hinzu. Ändern Sie die Flags je nach Gerät. Verwenden Sie als Beispiel die CL odm_dlkm
zu CF hinzufügen“ .
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Kopieren von Kernelmodulen in eine Partition
Um die Kernelmodule auszuwählen, die Sie in die vendor_dlkm
Partition kopieren möchten, listen Sie sie in BOARD_VENDOR_KERNEL_MODULES
auf.
Wenn Sie den Inhalt von modules.load
überschreiben möchten, können Sie ihn in BOARD_VENDOR_KERNEL_MODULES_LOAD
angeben.
Zur Erstellungszeit werden die in BOARD_VENDOR_KERNEL_MODULES
aufgeführten Module in $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules
installiert. Unter /vendor/lib/modules
wird ein symbolischer Link erstellt, der zu /vendor_dlkm/lib/modules
führt.
Um die Kernelmodule auszuwählen, die Sie in die Partition odm_dlkm
kopieren möchten, listen Sie sie ebenfalls in BOARD_ODM_KERNEL_MODULES
auf. Der Plattform-Build führt depmod
auf den Modulen aus und kopiert die depmod
Ausgabedateien in das Image. Der Build erstellt eine Datei modules.load
und speichert sie im Image. Diese Datei enthält alle in BOARD_ODM_KERNEL_MODULES
aufgeführten Module.
Wenn Sie den Inhalt von modules.load
überschreiben möchten, können Sie ihn in BOARD_ODM_KERNEL_MODULES_LOAD
angeben.
Zur Erstellungszeit werden die in BOARD_ODM_KERNEL_MODULES
aufgeführten Module in $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
installiert. Unter /odm/lib/modules
wird ein symbolischer Link erstellt, der zu /odm_dlkm/lib/modules
führt.
Verwenden Sie immer /vendor/lib/modules
und /odm/lib/modules
für Vendor- und ODM-Kernelmodule.
Verwenden Sie niemals /vendor_dlkm/lib/modules. Geräte ohne vendor_dlkm
Partition installieren BOARD_VENDOR_KERNEL_MODULES
direkt in /vendor/lib/modules
. Dies ist problematisch, da /vendor_dlkm/lib/modules
nicht existiert.
Verwenden Sie niemals /odm_dlkm/lib/modules. Geräte ohne odm_dlkm
Partition installieren BOARD_ODM_KERNEL_MODULES
direkt in /odm/lib/modules
. Dies ist problematisch, da /odm_dlkm/lib/modules
nicht existiert.
Partitionsmontage und Modulladen
Während first_stage_init
werden die Partitionen vendor_dlkm
und odm_dlkm
in den Partitionen /vendor_dlkm
bzw. /odm_dlkm
gemountet. In diesem Fall werden symbolische Links unter /vendor/lib/modules
und /odm/lib/modules
verfügbar.
Ein Anbieterprozess (wie ein „.rc“-Skript) kann dann die Kernelmodule basierend auf der in modules.load
angegebenen Reihenfolge laden. Der Vendor-Prozess kann die Module bei Bedarf auch zu einem späteren Zeitpunkt laden.
Dazugehörige Dokumentation
Eine Dokumentation zur Erstellung einer Vendor-Boot-Partition (die die Vendor-RAMDisk enthält) finden Sie unter Kernel Module Support .