Ramdisk-Partitionen

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 stellen system.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. Wenn androidboot.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.

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.

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.

system.img
  -/
    - bin/
    - etc
    - vendor -> /vendor
    - ...
   

Enthält den zusammengeführten Inhalt von $TARGET_SYSTEM_OUT und $TARGET_ROOT_OUT.

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 $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)
    ...
    

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)
    ...