Ein generisches Kernel-Image (GKI) enthält möglicherweise nicht die erforderliche Treiberunterstützung für
ein Gerät zum Bereitstellen von Partitionen aktivieren. Um einem Gerät das
Bereitstellen von Partitionen zu ermöglichen
Um den Bootvorgang fortzusetzen, wird init
der ersten Phase optimiert, um den
Kernelmodule auf einer Ramdisk Die Ramdisk ist in verschiedene
anbieter-ramdisks. Die Kernel-Module des Anbieters werden im Anbieter-RAMdisk gespeichert. Die
die Reihenfolge, in der Kernelmodule geladen werden,
konfigurierbar ist.
Modulstandort
Ramdisk ist das Dateisystem für init,
der ersten Phase und für die
Wiederherstellungs-/Fastbootd-Image auf A/B- und virtuellen A/B-Geräten. Es ist ein
initramfs
besteht aus zwei cpio-Archiven, die durch
dem Bootloader. Das erste cpio-Archiv, das als Anbieter-RAMdisk gespeichert wird
in der Anbieter-Boot-Partition enthält folgende Komponenten:
- Kernel-Module des Anbieters
init
der ersten Phase, die sich in/lib/modules/
. modprobe
-Konfigurationsdateien, die sich in/lib/modules/
befinden:modules.dep
,modules.softdep
,modules.alias
,modules.options
.- Eine
modules.load
-Datei, die angibt, welche Module geladen werden sollen und in welcher Reihenfolge/lib/modules/
. - Kernelmodule für die Wiederherstellung von Anbietern für A/B- und virtuelle A/B-Geräte in
/lib/modules/
modules.load.recovery
gibt an, welche Module geladen werden sollen. für A/B- und virtuelle A/B-Geräte./lib/modules
.
Das zweite cpio-Archiv, das mit der GKI bereitgestellt wird
als ramdisk von boot.img und auf den
enthält first_stage_init
und die Bibliotheken, von denen es abhängig ist.
Modul wird in der ersten Initialisierungsphase geladen
init
der ersten Phase beginnt mit dem Lesen der Modprobe-Konfiguration
Dateien von /lib/modules/
auf der Ramdisk Als Nächstes wird die Liste
der Module, die in /lib/modules/modules.load
angegeben sind (oder im Fall von
der Wiederherstellung, /lib/modules/modules.load.recovery
) und versucht,
jedes dieser Module der Reihe nach gemäß der im
die zuvor geladenen Dateien. Die angeforderte Bestellung kann von bis abweichen.
sowohl harte als auch weiche Abhängigkeiten.
Support aufbauen, erste Phase der Initialisierung
Um die Kernelmodule anzugeben, die in den Anbieter "ramdisk cpio" kopiert werden sollen, geben Sie
sie in BOARD_VENDOR_RAMDISK_KERNEL_MODULES
. Der Build wird ausgeführt
depmod
für diese Module und fügt die resultierende Modprobe-Konfiguration ein
vom Anbieter ramdisk cpio.
Der Build erstellt außerdem eine modules.load
-Datei und speichert sie im
Anbieter ramdisk cpio. Standardmäßig enthält sie alle Module, die in
BOARD_VENDOR_RAMDISK_KERNEL_MODULES
Um den Inhalt von
verwenden Sie BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD
, wie im
in diesem Beispiel:
BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD := \ device/vendor/mydevice-kernel/first.ko \ device/vendor/mydevice-kernel/second.ko \ device/vendor/mydevice-kernel/third.ko
Build-Support, vollständige Android-Funktionen
Wie bei Android 10 und älteren Releases werden die in den
BOARD_VENDOR_KERNEL_MODULES
werden von der Android-Plattform kopiert
in die Anbieterpartition unter /vendor/lib/modules
einbauen. Die
Plattform-Build führt depmod
auf diesen Modulen aus und kopiert die
depmod
-Ausgabedateien in die Anbieterpartition
Standort. Der Mechanismus zum Laden von Kernelmodulen aus /vendor
wie bei früheren Android-Versionen. Die Entscheidung liegt bei Ihnen.
wie und wann diese Module geladen werden.
init.rc
-Scripts.
Platzhalter und integrierte Kernel-Builds
Anbieter, die ihren Geräte-Kernel-Build mit dem Android-Plattform-Build kombinieren
kann bei der Verwendung der oben genannten BOARD
-Makros zur
geben Sie die Kernelmodule an, die auf das Gerät kopiert werden sollen. Wenn das Zulieferunternehmen
die Kernelmodule in den Build-Dateien der Geräteplattform befinden,
können sie einen Platzhalter verwenden,
($(wildcard device/vendor/mydevice/*.ko
) Beachten Sie, dass der Platzhalter
funktionieren bei einem integrierten Kernel-Build, denn wenn der Befehl „make“
die Makros in Makefiles erweitert werden, die Kernelmodule nicht erstellt wurden, sodass die Makros
sind leer.
Um dieses Problem zu umgehen, lässt der Anbieter möglicherweise eine ZIP-Datei vom Kernel-Build erstellen.
Archiv mit den Kernelmodulen, die in jede Partition kopiert werden sollen.
Pfad dieses ZIP-Archivs in BOARD_*_KERNEL_MODULES_ARCHIVE
festlegen
Dabei ist *
der Name der Partition (z. B.
BOARD_VENDOR_KERNEL_MODULES_ARCHIVE
. Entwicklung der Android-Plattform
extrahiert dieses ZIP-Archiv an den entsprechenden Speicherort und führt depmod
aus.
zu den Modulen.
Das ZIP-Archiv des Kernelmoduls sollte eine Make-Regel haben, die sicherstellt, dass die Plattform Build das Archiv bei Bedarf generieren kann.
Recovery
In früheren Android-Releases waren die für die Wiederherstellung erforderlichen Kernelmodule
angegeben in BOARD_RECOVERY_KERNEL_MODULES
. In Android 12
Für die Wiederherstellung erforderliche Kernel-Module sind immer noch
mit diesem Makro angegeben werden. Die Kernelmodule für die Wiederherstellung werden jedoch
vom Anbieter „ramdisk cpio“ und nicht vom generischen „ramdisk cpio“. Standardmäßig alle
In BOARD_RECOVERY_KERNEL_MODULES
aufgeführte Kernelmodule sind geladen
init
in der ersten Phase. Wenn Sie nur eine Teilmenge davon
zu ladenden Module, geben Sie den Inhalt dieser Teilmenge in
BOARD_RECOVERY_KERNEL_MODULES_LOAD
Weitere Dokumentation
Weitere Informationen zum Erstellen einer Anbieter-Boot-Partition (die den Anbieter enthält von Ramdisk), siehe Boot Partitionen