Treble-fähige Geräte müssen die Montage der ersten Stufe aktivieren, um sicherzustellen,
init
kann Sicherheitsoptimiertes Linux laden
(SELinux) Richtlinienfragmente, die über system
und
vendor
Partitionen. Dieser Zugriff ermöglicht
auch das Laden des Kernels,
so schnell wie möglich nach dem Kernel-Bootvorgang.
Für eine frühe Bereitstellung benötigt Android Zugriff auf die Dateisysteme auf
in dem sich die Module befinden. Android 8.0 und höher unterstützt die Montage
/system
, /vendor
oder /odm
bereits ab
in der ersten Phase von init
(also bevor SElinux initialisiert wird).
Fstab-Einträge
Unter Android 9 und niedriger können Geräte fstab
-Einträge für
Frühzeitig bereitgestellte Partitionen mithilfe der Gerätestruktur
Overlays (DTOs). Unter Android 10 und höher
Geräte müssen fstab
-Einträge für vorzeitig bereitgestellte Partitionen angeben
Verwendung einer fstab
-Datei in der ersten Phase
ramdisks. Android-Geräte
In 10 werden die folgenden fs_mgr
-Flags eingeführt:
zur Verwendung in der Datei fstab
:
first_stage_mount
gibt an, dass eine Partition bereitgestellt wurde. der ersten Init-Phase.logical
gibt an, dass dies ein dynamische Partition.avb=vbmeta-partition-name
gibt die Partitionvbmeta
. Mit der ersten Initialisierungsphase wird diese Partition initialisiert. bevor Sie andere Partitionen bereitstellen. Das Argument für dieses Flag kann weggelassen werden, wenn Die Partitionvbmeta
für den Eintrag wurde bereits durch weiterenfstab
-Eintrag in einer vorherigen Zeile.
Das folgende Beispiel zeigt fstab
-Einträge zum Festlegen des
system
-, vendor
- und product
-Partitionen
als logische (dynamische) Partitionen.
#<dev> <mnt_point> <type> <mnt_flags options> <fs_mgr_flags> system /system ext4 ro,barrier=1 wait,slotselect,avb=vbmeta_system,logical,first_stage_mount vendor /vendor ext4 ro,barrier=1 wait,slotselect,avb=vbmeta,logical,first_stage_mount product /product ext4 ro,barrier=1 wait,slotselect,avb,logical,first_stage_mount
In diesem Beispiel gibt der Anbieter die Partition vbmeta
mit
das fs_mgr
-Flag avb=vbmeta
, aber product
lässt das Argument vbmeta
weg, da der Anbieter dies bereits getan hat
vbmeta
für die Liste der Partitionen.
Auf Geräten mit Android 10 und höher muss
fstab
-Datei in der Ramdisk und im vendor
-Partition an.
Ramdisk
Der Speicherort der Datei fstab
in der Ramdisk hängt davon ab, wie ein Gerät
verwendet Ramdisk.
Geräte mit einem Bootlaufwerk müssen das fstab
im Stammverzeichnis der Boot-ramdisk. Hat das Gerät sowohl ein Bootlaufwerk als auch eine
Wiederherstellungs-RAMdisk: Es sind keine Änderungen an der Wiederherstellungs-RAMdisk erforderlich. Beispiel:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RAMDISK)/fstab.$(PRODUCT_PLATFORM)
Geräte, die die Wiederherstellung als RAM-Disk nutzen, müssen den
Kernel-Befehlszeilenparameter androidboot.force_normal_boot=1
zu
entscheiden, ob Android gestartet oder die Wiederherstellung gestartet werden soll. Geräte
Markteinführung mit Android 12 oder höher mit
Kernel-Version 5.10 oder höher muss bootconfig verwenden, um den
androidboot.force_normal_boot=1
-Parameter. In
Init wird in der ersten Phase
ein Root-Vorgang zum Umschalten ausgeführt.
/first_stage_ramdisk
, bevor Sie die Early-mount-Partitionen bereitstellen,
Die Datei fstab
muss also
$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk
Beispiel:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk/fstab.$(PRODUCT_PLATFORM)
Vendor
Auf allen Geräten muss eine Kopie der Datei „fstab
“ abgelegt werden:
/vendor/etc
. Das liegt daran, dass in der ersten Phase
ramdisk ein, nachdem die Partitionen bereits bereitgestellt wurden
Root-Vorgang wechseln, um die Bereitstellung unter /system
zu verschieben
/
. Alle nachfolgenden Vorgänge, die Zugriff auf fstab
benötigen
Dateien müssen daher die Kopie in /vendor/etc
verwenden. Beispiel:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.$(PRODUCT_PLATFORM)
Partitionen frühzeitig bereitstellen, VBoot 1.0
Zu den Anforderungen für Early-mount-Partitionen mit VBoot 1.0 gehören:
- Pfade von Geräteknoten müssen ihre
by-name
-Symlinks infstab
- und devicetree-Einträge. Anstatt z. B. anstelle von mit/dev/block/mmcblk0pX
, achten Sie darauf, dass die Partitionen benannt ist und der Geräteknoten/dev/block/…./by-name/{system,vendor,odm}
. - Für
PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION
undCUSTOM_IMAGE_VERITY_BLOCK_DEVICE
in der Gerätekonfiguration für das Produkt (d. h. indevice/oem/project/device.mk
) muss mit den entsprechende Blockgeräteknoten, die im Feldby-name
angegeben sindfstab
/devicetree-Einträge. Beispiel:PRODUCT_SYSTEM_VERITY_PARTITION := /dev/block/…./by-name/system PRODUCT_VENDOR_VERITY_PARTITION := /dev/block/…./by-name/vendor CUSTOM_IMAGE_VERITY_BLOCK_DEVICE := /dev/block/…./by-name/odm
- Einträge, die über Gerätestruktur-Overlays bereitgestellt werden, dürfen sich nicht im
fstab
Dateifragmente. Wenn Sie z. B. einen Eintrag für Stellen Sie/vendor
im Devicetree, die Dateifstab
, bereit darf diesen Eintrag nicht wiederholen. - Partitionen, die
verifyatboot
erfordern, dürfen nicht frühzeitig bereitgestellt werden (wird nicht unterstützt). - Der Versionsmodus bzw. -status für bestätigte Partitionen muss angegeben werden in
kernel_cmdline
mitandroidboot.veritymode
-Option (bestehende Anforderung).
Devicetree frühzeitig bereitstellen, VBoot 1.0
In Android 8.x und höher parst init
den Devicetree und
erstellt fstab
-Einträge, um die Partition frühzeitig bereitzustellen.
in der ersten Phase. Ein fstab
-Eintrag hat das folgende Format:
src mnt_point type mnt_flags fs_mgr_flags
Devicetree-Eigenschaften sind so definiert, dass sie dieses Format imitieren:
fstab
-Einträge müssen unter dem folgenden Wert liegen:/firmware/android/fstab
in der Gerätestruktur und muss einen kompatibler String aufandroid,fstab
festgelegt.- Jeder Knoten unter
/firmware/android/fstab
wird behandelt als einzelner Early-mount-fstab
-Eintrag. Ein Knoten muss Folgendes haben: Definition der Eigenschaften: <ph type="x-smartling-placeholder">- </ph>
dev
muss auf den Geräteknoten verweisen, der den Partitionby-name
type
muss der Dateisystemtyp sein (z. B.fstab
Dateien)mnt_flags
muss die durch Kommas getrennte Liste der Bereitstellungs-Flags sein (wie infstab
-Dateien)fsmgr_flags
muss die Liste der Android-fs_mgr flags
sein (wie infstab
-Dateien).
- A/B-Partitionen müssen die Option
slotselect fs_mgr
haben. - Partitionen mit aktiviertem dm-verity müssen eine
verify fs_mgr
haben Option.
Beispiel: /system und /vendor auf N6P
Das folgende Beispiel zeigt die Early-Bereitstellung für system
von Devicetree
und vendor
Partitionen auf Nexus 6P:
/ { firmware { android { compatible = "android,firmware"; fstab { compatible = "android,fstab"; system { compatible = "android,system"; dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/system"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait,verify"; }; vendor { compatible = "android,vendor"; dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/vendor"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait"; }; }; }; }; };
Beispiel: /vendor auf Pixel
Das folgende Beispiel zeigt die Early-Bereitstellung für /vendor
von Devicetree
auf Pixel (vergessen Sie nicht, slotselect
für Partitionen gemäß
A/B):
/ { firmware { android { compatible = "android,firmware"; fstab { compatible = "android,fstab"; vendor { compatible = "android,vendor"; dev = "/dev/block/platform/soc/624000.ufshc/by-name/vendor"; type = "ext4"; mnt_flags = "ro,barrier=1,discard"; fsmgr_flags = "wait,slotselect,verify"; }; }; }; }; };
Partitionen frühzeitig bereitstellen, VBoot 2.0
VBoot 2.0 ist Android Verified Boot (AVB). Die Voraussetzungen für eine Bereitstellung von Partitionen mit VBoot 2.0 sind:
- Die Pfade der Geräteknoten müssen ihre
by-name
-Symlinks verwenden infstab
- und devicetree-Einträge. Anstatt z. B. anstelle von mit/dev/block/mmcblk0pX
verwenden, müssen Sie sicherstellen, benannt und der Geräteknoten ist/dev/block/…./by-name/{system,vendor,odm}
. - Erstellen Sie Systemvariablen (z. B.
PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION
undCUSTOM_IMAGE_VERITY_BLOCK_DEVICE
), die für VBoot 1.0 verwendet werden, sind NICHT erforderlich für VBoot 2.0. Erstellen Sie stattdessen in VBoot 2.0 eingeführte Variablen (einschließlichBOARD_AVB_ENABLE := true
) muss definiert werden. für ein vollständige Konfiguration, siehe Systemintegration für AVB erstellen. - Einträge, die über Gerätestruktur-Overlays bereitgestellt werden, dürfen sich nicht im
fstab
Dateifragmente. Wenn Sie beispielsweise einen Eintrag für Stellen Sie/vendor
im Devicetree, die Dateifstab
, bereit darf diesen Eintrag nicht wiederholen. verifyatboot
wird von VBoot 2.0 nicht unterstützt, unabhängig davon, ob Early Mount aktiviert ist oder nicht.- Der Versionsmodus bzw. -status für bestätigte Partitionen muss angegeben werden in
kernel_cmdline
mitandroidboot.veritymode
Option (bestehende Anforderung). Nehmen Sie die folgenden Korrekturen AVB: <ph type="x-smartling-placeholder">
Devicetree frühzeitig bereitstellen, VBoot 2.0
Die Konfiguration im Devicetree für VBoot 2.0 ist die gleiche wie in VBoot 1.0 mit dem Parameter folgende Ausnahmen:
fsmgr_flag
wurde vonverify
auf umgestelltavb
- Alle Partitionen mit AVB-Metadaten müssen sich im VBMeta-Eintrag in der
Devicetree zu starten, auch wenn die Partition nicht vorzeitig bereitgestellt wird (z. B.
/boot
.
Beispiel: /system und /vendor auf N5X
Das folgende Beispiel zeigt eine Early-Mounted-Installation von Devicetree für die
Partitionen system
und vendor
auf Nexus 5X Hinweise:
/system
ist mit AVB bereitgestellt und/vendor
ist ohne Integritätsprüfung bereitgestellt werden.- Da das Nexus 5X keine
/vbmeta
-Partition hat, vbmeta befindet sich am Ende der Partition/boot
(weitere Informationen siehe AOSP-Änderungsliste)./ { firmware { android { compatible = "android,firmware"; vbmeta { compatible = "android,vbmeta"; parts = "boot,system,vendor"; }; fstab { compatible = "android,fstab"; system { compatible = "android,system"; dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/system"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait,avb"; }; vendor { compatible = "android,vendor"; dev = "/dev/block/platform/soc.0/f9824900.sdhci/by-name/vendor"; type = "ext4"; mnt_flags = "ro,barrier=1,inode_readahead_blks=8"; fsmgr_flags = "wait"; }; }; }; }; };
Beispiel: /vendor auf Pixel
Das folgende Beispiel zeigt, wie /vendor
auf einem Pixel früh montiert wird.
Hinweise:
- Im vbmeta-Eintrag sind mehr Partitionen angegeben, da diese Partitionen sind durch AVB geschützt.
- Alle AVB-Partitionen müssen enthalten sein, auch wenn nur
/vendor
ist bereits montiert sind. - Denken Sie daran,
slotselect
für Partitionen hinzuzufügen, die A/B unterliegen./ { vbmeta { compatible = "android,vbmeta"; parts = "vbmeta,boot,system,vendor,dtbo"; }; firmware { android { compatible = "android,firmware"; fstab { compatible = "android,fstab"; vendor { compatible = "android,vendor"; dev = "/dev/block/platform/soc/624000.ufshc/by-name/vendor"; type = "ext4"; mnt_flags = "ro,barrier=1,discard"; fsmgr_flags = "wait,slotselect,avb"; }; }; }; }; };