In Android 10 und 11 enthält das RAM-Disk der ersten Phase die Init-Binärdatei der ersten Phase (die eine frühe Bereitstellung gemäß den Fstab-Einträgen durchführt) und die Fstab-Dateien des Anbieters. Wie unter Android 9 und niedriger enthält system.img
den Inhalt von $TARGET_ROOT_OUT
.
Bei Geräten mit einem Boot-Ramdisk (nicht A/B) ist die erste Phase der Init eine statische ausführbare Datei, die sich unter
/init
befindet. Diese Geräte stellensystem.img
als/system
bereit und führen dann einen Switch Root-Vorgang aus, um die Bereitstellung unter/system
zu/
zu verschieben. Der Inhalt der Ramdisk wird nach Abschluss der Bereitstellung freigegeben.Bei Geräten, die die Wiederherstellung als Ramdisk verwenden, befindet sich die erste Initialisierungsphase unter
/init
innerhalb der RAM-Disk. Auf diesen Geräten wird zuerst der Stammordner zu/first_stage_ramdisk
gewechselt, um die Wiederherstellungskomponenten aus der Umgebung zu entfernen. Anschließend wird wie bei Geräten mit einem Boot-Ramdisk vorgegangen, d. h.system.img
wird als/system
bereitgestellt, der Stammordner wird gewechselt, um diese Bereitstellung zu/
zu verschieben, und der Ramdisk-Inhalt wird nach der Bereitstellung freigegeben. Wennandroidboot.force_normal_boot=1
in der Kernel-Befehlszeile (oder in der Boot-Konfiguration ab Android 12) vorhanden ist, starten die Geräte normal (in Android), anstatt in den Wiederherstellungsmodus zu starten.
Nach Abschluss der ersten Phase wird /system/bin/init
mit dem Argument selinux_setup
ausgeführt, um SELinux zu kompilieren und in das System zu laden. Schließlich führt init /system/bin/init
noch einmal mit dem Argument second_stage
aus. An diesem Punkt wird die Hauptphase von init ausgeführt und der Bootvorgang mit den init.rc
-Scripts fortgesetzt.
In den folgenden Abschnitten werden die Unterschiede bei Partitionslayouts für Geräte ohne A/B-Partition vor und nach Android 10 beschrieben.
Partitionslayouts (keine A/B-Geräte)
In den folgenden Abschnitten werden die Unterschiede bei Partitionslayouts für Nicht-A/B-Geräte vor und nach Android 10 beschrieben.
boot.img
Ramdisk (Android 8.x und niedriger) |
System als Root (Android 9) |
Ramdisk (Android 10 und 11) |
---|---|---|
Enthält einen Kernel und ein ramdisk.img -/ - init.rc - init - etc -> /system/etc - system/ (mount point) - vendor/ (mount point) - odm/ (mount point) ... |
Enthält nur einen normalen Boot-Kernel. | Enthält einen Kernel und ramdisk.img -/ - init - vendor fstab files - system/ (mount point) - vendor/ (mount point) - odm/ (mount point) ... |
recovery.img
Enthält einen Wiederherstellungs-Kernel und einen Wiederherstellungs-ramdisk.img
system.img
Ramdisk (Android 8.x und niedriger) |
System als Root (Android 9) |
Ramdisk (Android 10 und 11) |
---|---|---|
Enthält ein system.img -/ - bin/ - etc - vendor -> /vendor - ... |
Enthält den zusammengeführten Inhalt von system.img -/ - init.rc - init - etc -> /system/etc - system/ - bin/ - etc/ - vendor -> /vendor - ... - vendor/ (mount point) - odm/ (mount point) ... |
Enthält den zusammengeführten Inhalt von system.img -/ - init.rc - init -> /system/bin/init - etc -> /system/etc - system/ - bin/ - etc/ - vendor -> /vendor - ... - vendor/ (mount point) - odm/ (mount point) ... |
Partitionslayouts (A/B-Geräte)
In den folgenden Abschnitten werden die Unterschiede bei Partitionslayouts für A/B-Geräte vor und nach Android 10 beschrieben.
boot.img
System als Root (Android 9) |
Ramdisk (Android 10 und 11) |
---|---|
Enthält den normalen Boot-Kernel und das Recovery-Ramdisk (BOARD_USES_RECOVERY_AS_BOOT := true ).Das Recovery-Ramdisk wird nur zum Starten in die Wiederherstellung verwendet. |
Enthält den normalen Boot-Kernel und das Recovery-Ramdisk (BOARD_USES_RECOVERY_AS_BOOT := true ). Das Recovery-Ramdisk wird verwendet, um sowohl in die Wiederherstellung als auch in Android zu booten. ramdisk.img -/ - init -> /system/bin/init - first_stage_ramdisk - vendor fstab files - etc -> /system/etc - system/ (mount point) - vendor/ (mount point) - odm/ (mount point) ... |
system.img
Enthält den zusammengeführten Inhalt von $TARGET_SYSTEM_OUT
und $TARGET_ROOT_OUT
.
system.img
-/
- init.rc
- init -> /system/bin/init
- etc -> /system/etc
- system/
- bin/
- etc/
- vendor -> /vendor
- ...
- vendor/ (mount point)
- odm/ (mount point)
...