DLKM-Partitionen von Anbietern und ODM

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.

Eine Dokumentation zum Erstellen einer Anbieter-Boot-Partition (die die Anbieter-RAMDisk enthält) finden Sie unter Unterstützung für Kernelmodul.