Mit Android 11 wird das Konzept des generischen Kernel-Images und der Bootpartition des Anbieters eingeführt. Die Bootpartition des Anbieters enthält Kernelmodule, die mit GKI kompatibel sind, und wird von der ersten Init-Phase geladen. Kernel-Module vor der Veröffentlichung von Android 11 werden auch in Anbieter- und ODM-Partitionen gespeichert und von Anbieterprozessen geladen.
Unter Android 11 oder höher können der Kernel und alle Kernelmodule unabhängig vom Rest der Partitionen aktualisiert werden. Wenn Sie Updates für in der Anbieterpartition gespeicherte Kernelmodule aktivieren möchten (ohne Aktualisierung 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 in der ODM-Partition gespeicherten Kernelmodule in eine neue Partition namens ODM DLKM verschieben. Diese Partition kann auch unabhängig aktualisiert werden.
Partitionsspeicherort
Die vendor_dlkm
- und odm_dlkm
-Partitionen befinden sich in der Super-Partition als weitere dynamische Partition.
Anbieter_dlkm-Inhalt in /vendor/lib/modules
- Kernelmodule des Anbieters
modprobe
Konfigurationsdateien- Eine
modules.load
-Datei
odm_dlkm-Inhalte in /odm/lib/modules
- ODM-Kernelmodule
modprobe
Konfigurationsdatei- Eine
modules.load
-Datei
Weitere Informationen zu den Konfigurationsdateien für Kernelmodule finden Sie unter Unterstützung für Kernelmodul.
Unterstützung aufbauen
Das Erstellen von vendor_dlkm
und odm_dlkm
ähnelt dem Erstellen anderer dynamischer Partitionen.
Build-Beispiel für „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 Updategruppe sollte der Gruppe entsprechen, 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 der Datei „fstab“ den folgenden Eintrag für vendor_dlkm
hinzu. Ändern Sie die Flags je nach Gerät. Verwenden Sie als Beispiel den 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 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 der Datei „fstab“ den folgenden Eintrag für odm_dlkm
hinzu. Ändern Sie die Flags entsprechend dem Gerät. Verwenden Sie als Beispiel den CL odm_dlkm
zu CF hinzufügen.
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.
Während der Buildzeit werden die in BOARD_VENDOR_KERNEL_MODULES
aufgeführten Module in $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules
installiert. An /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 Sie in die Partition odm_dlkm
kopieren möchten, listen Sie sie in BOARD_ODM_KERNEL_MODULES
auf. Der Plattform-Build führt depmod
auf den Modulen aus und kopiert die depmod
-Ausgabedateien in das Image.
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.
Zum Zeitpunkt der Build-Erstellung 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 Anbieter- und ODM-Kernelmodule.
Verwenden Sie niemals /vendor_dlkm/lib/modules. Auf Geräten ohne vendor_dlkm
-Partition wird BOARD_VENDOR_KERNEL_MODULES
direkt unter /vendor/lib/modules
installiert. Dies ist problematisch, da /vendor_dlkm/lib/modules
nicht vorhanden ist.
Verwenden Sie niemals /odm_dlkm/lib/modules
. Auf Geräten ohne odm_dlkm
-Partition wird BOARD_ODM_KERNEL_MODULES
direkt auf /odm/lib/modules
installiert. Das ist problematisch, da /odm_dlkm/lib/modules
nicht existiert.
Partitions bereitstellen und Module laden
Während first_stage_init
werden die Partitionen vendor_dlkm
und odm_dlkm
in den Verzeichnissen /vendor_dlkm
und /odm_dlkm
bereitgestellt. In diesem Fall werden Symlinks unter /vendor/lib/modules
und /odm/lib/modules
verfügbar.
Ein Anbieterprozess (z. B. ein .rc
-Script) kann dann die Kernelmodule gemäß der in modules.load
angegebenen Reihenfolge laden. Die Module können auch später vom Anbieterprozess geladen werden.
Weitere Dokumentation
Eine Dokumentation zum Erstellen einer Anbieter-Boot-Partition (die die Anbieter-RAMDisk enthält) finden Sie unter Unterstützung für Kernelmodul.