Mit Android 11 werden das generische Kernel-Image und die Vendor-Boot-Partition eingeführt. In der Bootpartition des Anbieters werden mit GKI kompatible Kernelmodule gespeichert, die von der Initialisierung der ersten Phase geladen werden. 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 auf der Anbieterpartition gespeichert sind (ohne Update der Anbieterpartition), verschieben Sie alle Module der Anbieterpartition auf 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 ist ein ähnlicher Vorgang wie das 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 Aktualisierungsgruppe 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 Änderung vendor_dlkm zu CF hinzufügen 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 Änderung odm_dlkm zu CF hinzufügen 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. Ein symbolischer Link wird unter /vendor/lib/modules 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 Plattform-Build 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 vorhanden ist.
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 werden 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
Eine Dokumentation zum Erstellen einer Vendor-Boot-Partition (die die Vendor-RAMDisk enthält) finden Sie unter Unterstützung von Kernelmodulen.