Mit Android 11 werden das generische Kernel-Image und die Vendor-Boot-Partition eingeführt. In der Vendor-Bootpartition werden Kernelmodule gespeichert, die mit GKI kompatibel sind. Sie wird von der Initialisierung der ersten Phase geladen. Kernelmodule vor der Veröffentlichung von Android 11 werden auch in Vendor- und ODM-Partitionen gespeichert und von Vendor-Prozessen geladen.
Unter Android 11 oder höher können der Kernel und alle Kernelmodule unabhängig von den anderen Partitionen aktualisiert werden. Wenn Sie Updates für Kernelmodule aktivieren möchten, die in der Anbieterpartition gespeichert sind (ohne Update der Anbieterpartition), verschieben Sie alle Module der Anbieterpartition in eine neue Partition namens Vendor DLKM (dynamisch ladbares Kernelmodul). Sie können diese Partition dann unabhängig aktualisieren. Ebenso können Sie alle Kernelmodule, die auf der ODM-Partition gespeichert sind, auf eine neue Partition namens ODM DLKM verschieben. Diese Partition kann auch unabhängig aktualisiert werden.
Partitionsort
Die Partitionen vendor_dlkm
und odm_dlkm
befinden sich in der Superpartition als weitere dynamische Partition.
vendor_dlkm-Inhalte in /vendor/lib/modules
- Anbieter-Kernelmodule
modprobe
-Konfigurationsdateien- Eine
modules.load
-Datei
odm_dlkm-Inhalte in /odm/lib/modules
- ODM-Kernelmodule
modprobe
-Konfigurationsdateien- Eine
modules.load
-Datei
Weitere Informationen zu Konfigurationsdateien für Kernelmodule finden Sie unter Unterstützung von Kernelmodulen.
Unterstützung gewinnen
Das Erstellen von vendor_dlkm
und odm_dlkm
ähnelt dem Erstellen anderer dynamischer Partitionen.
Beispiel für den Build von „vendor_dlkm“
Erstellen Sie vendor_dlkm
, wie in den folgenden Beispielen 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 Updategruppe. Die Update-Gruppe sollte die Gruppe sein, in der sich die Anbieterpartition befindet.
Für A/B- und virtuelle A/B-Geräte: device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
Fügen Sie fstab den folgenden Eintrag für vendor_dlkm
hinzu. Ändern Sie die Flags entsprechend dem Gerät. Verwenden Sie die CL Add vendor_dlkm
to CF als Beispiel.
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Beispiel für ODM-DLKM-Build
Erstellen Sie odm_dlkm
, wie in den folgenden Beispielen 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 virtuelle A/B-Geräte: device.mk
AB_OTA_PARTITIONS += odm_dlkm
fstab
Fügen Sie fstab den folgenden Eintrag für odm_dlkm
hinzu. Ändern Sie die Flags entsprechend dem Gerät. Verwenden Sie die CL Add odm_dlkm
to CF als Beispiel.
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Kernelmodule in eine Partition kopieren
Wenn Sie die Kernelmodule auswählen möchten, die in die Partition vendor_dlkm
kopiert werden sollen, 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 Build-Zeit 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.
Wenn Sie die Kernelmodule auswählen möchten, die in die Partition odm_dlkm
kopiert werden sollen, listen Sie sie in BOARD_ODM_KERNEL_MODULES
auf. Beim Plattformbuild wird depmod
für die Module ausgeführt und die depmod
-Ausgabedateien werden in das Image kopiert.
Beim Build wird eine modules.load
-Datei erstellt und im Image gespeichert.
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 Build-Zeit werden die in BOARD_ODM_KERNEL_MODULES
aufgeführten Module in $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
installiert. Ein symbolischer Link wird unter /odm/lib/modules
erstellt, der zu /odm_dlkm/lib/modules
führt.
Verwenden Sie immer /vendor/lib/modules
und /odm/lib/modules
für Kernelmodule von Anbietern und ODMs.
Verwenden Sie niemals /vendor_dlkm/lib/modules. Auf Geräten ohne vendor_dlkm
-Partition wird BOARD_VENDOR_KERNEL_MODULES
direkt in /vendor/lib/modules
installiert. Das ist problematisch, da /vendor_dlkm/lib/modules
nicht existiert.
Verwenden Sie /odm_dlkm/lib/modules
niemals. Auf Geräten ohne odm_dlkm
-Partition wird BOARD_ODM_KERNEL_MODULES
direkt in /odm/lib/modules
installiert. Das ist problematisch, da /odm_dlkm/lib/modules
nicht vorhanden ist.
Partitionen einhängen und Module laden
Während first_stage_init
werden die Partitionen vendor_dlkm
und odm_dlkm
in den Verzeichnissen /vendor_dlkm
bzw. /odm_dlkm
bereitgestellt. In diesem Fall sind Symlinks unter /vendor/lib/modules
und /odm/lib/modules
verfügbar.
Ein Anbieterprozess (z. B. ein .rc
-Skript) kann dann die Kernelmodule in der in modules.load
angegebenen Reihenfolge laden. Der Anbietervorgang kann die Module bei Bedarf auch später laden.
Weitere Dokumentation
Die Dokumentation zum Erstellen einer Vendor-Boot-Partition (die die Vendor-RAMDisk enthält) finden Sie unter Unterstützung von Kernelmodulen.