I dispositivi con gli alti devono attivare il montaggio del primo stadio per garantire
init
può caricare Security-Enhanced Linux
(SELinux) di frammenti di criteri distribuiti tra system
e
vendor
partizioni. Questo accesso consente anche il caricamento
il prima possibile dopo l'avvio del kernel.
Per eseguire il montaggio anticipato, Android deve avere accesso ai file system su
in cui si trovano i moduli. Android 8.0 e versioni successive supporta il montaggio
/system
, /vendor
o /odm
già nel
la prima fase di init
(prima dell'inizializzazione di SElinux).
Voci FStab
In Android 9 e versioni precedenti, i dispositivi possono specificare fstab
voci per
montate inizialmente utilizzando la struttura ad albero dei dispositivi
overlay (DTO). In Android 10 e versioni successive,
i dispositivi devono specificare fstab
voci per le partizioni montate in anticipo
utilizzando un file fstab
nella prima fase
ramdisk. Android
10 introduce i seguenti flag fs_mgr
per l'utilizzo nel file fstab
:
first_stage_mount
indica che una partizione è montata con il comando init della prima fase.logical
indica che si tratta di un partizione dinamica.avb=vbmeta-partition-name
specificavbmeta
partizione. L'inizializzazione della prima fase inizializza questa partizione prima di montare altre partizioni. L'argomento di questo flag può essere omesso se la partizionevbmeta
per la voce è già stata specificata da un'altra vocefstab
in una riga precedente.
L'esempio seguente mostra le voci fstab
per impostare la
Partizioni system
, vendor
e product
come partizioni logiche (dinamiche).
#<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 questo esempio, il fornitore specifica la partizione vbmeta
utilizzando
il flag fs_mgr
avb=vbmeta
, ma product
omette l'argomento vbmeta
perché il fornitore ha già aggiunto
vbmeta
all'elenco delle partizioni.
I dispositivi con Android 10 e versioni successive devono inserire l'
fstab
nel ramdisk e nel vendor
della partizione di testo.
Ramdisk
La posizione del file fstab
nel ramdisk dipende da come un dispositivo
usa ramdisk.
I dispositivi con un ramdisk di avvio devono inserire il fstab
nella radice ramdisk di avvio. Se il dispositivo dispone sia di un ramdisk di avvio sia di
ramdisk di ripristino, non sono necessarie modifiche al ramdisk di ripristino. Esempio:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RAMDISK)/fstab.$(PRODUCT_PLATFORM)
I dispositivi che usano il ripristino come ramdisk devono usare
il parametro della riga di comando del kernel androidboot.force_normal_boot=1
per
decidere se avviare Android o continuare con il ripristino. Dispositivi
Lancio con Android 12 o versioni successive con
il kernel versione 5.10 o successiva deve usare bootconfig per passare
Parametro androidboot.force_normal_boot=1
. Nella
su questi dispositivi, la prima fase init esegue un'operazione di cambio principale
/first_stage_ramdisk
prima di montare le partizioni di montaggio anticipato,
quindi i dispositivi devono inserire il file fstab
$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk
. Esempio:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk/fstab.$(PRODUCT_PLATFORM)
Fornitore
Tutti i dispositivi devono inserire una copia del file fstab
in
/vendor/etc
. Questo perché l'init della prima fase libera
ramdisk dopo aver completato il montaggio iniziale delle partizioni ed esegue una
operazione principale di cambio per spostare la montatura in /system
su
/
. Qualsiasi operazione successiva che richiede l'accesso a fstab
devono quindi usare la copia in /vendor/etc
. Esempio:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.$(PRODUCT_PLATFORM)
Monta le partizioni in anticipo, VBoot 1.0
I requisiti per montare anticipatamente le partizioni con VBoot 1.0 includono:
- I percorsi dei nodi dei dispositivi devono utilizzare i relativi link simbolici
by-name
in Vocifstab
e devicetree. Ad esempio, invece di specificare usando/dev/block/mmcblk0pX
, assicurati che le partizioni siano e il nodo del dispositivo/dev/block/…./by-name/{system,vendor,odm}
. - Percorsi specificati per
PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION
eCUSTOM_IMAGE_VERITY_BLOCK_DEVICE
nella configurazione del dispositivo per del prodotto (vale a diredevice/oem/project/device.mk
) deve corrispondere ai nodi di dispositivi a blocchi corrispondenti specificatiby-name
nelfstab
voci/devicetree. Esempio: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
- Le voci fornite tramite gli overlay ad albero dei dispositivi non devono ripetersi nel
fstab
frammenti di file. Ad esempio, quando specifichi una voce monta/vendor
nella struttura ad albero dei dispositivi, il filefstab
non devono ripetere l'immissione. - Le partizioni che richiedono
verifyatboot
non devono montare anticipatamente (questa operazione non è supportata). - Lo stato o la modalità di verifica per le partizioni verificate devono essere specificati in
kernel_cmdline
con l'opzioneandroidboot.veritymode
(requisito esistente).
Monta in anticipo il dispositivo, VBoot 1.0
In Android 8.x e versioni successive, init
analizza la struttura ad albero dei dispositivi e
crea fstab
voci per montare la partizione all'inizio
nella prima fase. Una voce fstab
ha il seguente formato:
src mnt_point type mnt_flags fs_mgr_flags
Le proprietà Devicetree vengono definite in modo da simulare questo formato:
fstab
voci devono essere inferiori a/firmware/android/fstab
nel devicetree e deve avere un oggetto stringa compatibile impostata suandroid,fstab
.- Ogni nodo in
/firmware/android/fstab
viene considerato singola voce di inizio montaggiofstab
. Un nodo deve avere quanto segue proprietà definite:dev
deve puntare al nodo dispositivo che rappresenta il partizioneby-name
type
deve essere il tipo di file system (ad esempiofstab
file)mnt_flags
deve essere l'elenco separato da virgole dei flag di montaggio (come infstab
file)fsmgr_flags
deve essere l'elenco di Androidfs_mgr flags
(come infstab
file)
- Le partizioni A/B devono avere un'opzione
slotselect fs_mgr
. - Le partizioni abilitate per dm-verity devono avere un
verify fs_mgr
.
Esempio: /system e /vendor su N6P
L'esempio seguente mostra il montaggio iniziale di devicetree per system
e vendor
partizioni sul 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"; }; }; }; }; };
Esempio: /fornitore su Pixel
L'esempio seguente mostra il montaggio iniziale di devicetree per /vendor
su Pixel (ricorda di aggiungere slotselect
per le partizioni soggette a
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"; }; }; }; }; };
Monta le partizioni in anticipo, VBoot 2.0
VBoot 2.0 è Avvio verificato di Android (AVB). I requisiti per le partizioni di montaggio con VBoot 2.0 sono:
- I percorsi dei nodi dei dispositivi devono utilizzare i relativi link simbolici
by-name
Vocifstab
e devicetree. Ad esempio, invece di specificare partizioni utilizzando/dev/block/mmcblk0pX
, assicurati che le partizioni e il nodo dispositivo/dev/block/…./by-name/{system,vendor,odm}
. - Crea variabili di sistema, ad esempio
PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION
eCUSTOM_IMAGE_VERITY_BLOCK_DEVICE
) utilizzati per VBoot 1.0 NON sono richiesta per VBoot 2.0. Invece, le variabili di build introdotte in VBoot 2.0 (inclusoBOARD_AVB_ENABLE := true
) deve essere definito; per un per la configurazione completa, consulta Build System Integration for AVB (Crea integrazione di sistema per AVB). - Le voci fornite tramite gli overlay ad albero dei dispositivi non devono ripetersi nel
fstab
frammenti di file. Ad esempio, se specifichi una voce monta/vendor
nella struttura ad albero dei dispositivi, il filefstab
non devono ripetere l'immissione. - VBoot 2.0 non supporta
verifyatboot
, che si tratti di montaggio anticipato sia abilitato o meno. - Lo stato o la modalità di verifica per le partizioni verificate devono essere specificati in
kernel_cmdline
tramiteandroidboot.veritymode
(requisito esistente). Assicurati di includere le seguenti correzioni per Tempo medio di esecuzione:
Monta in anticipo il dispositivo, VBoot 2.0
La configurazione in devicetree per VBoot 2.0 è la stessa di quella in VBoot 1.0, con le seguenti eccezioni:
- Il valore
fsmgr_flag
è cambiato daverify
aavb
. - Tutte le partizioni con metadati AVB devono essere inserite nella voce VBMeta nella
devicetree, anche quando la partizione non viene montata in anticipo (ad esempio,
/boot
).
Esempio: /system e /vendor su N5X
L'esempio seguente mostra un montaggio iniziale di devicetree per
Partizioni system
e vendor
su Nexus 5X. Tieni presente che:
/system
è montato con AVB, mentre/vendor
è montati senza verifica dell'integrità.- Poiché il Nexus 5X non ha una partizione
/vbmeta
, il file di primo livello vbmeta si trova alla fine della partizione/boot
(per maggiori dettagli, consulta l'elenco delle modifiche AOSP)./ { 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"; }; }; }; }; };
Esempio: /fornitore su Pixel
L'esempio seguente mostra il montaggio anticipato di /vendor
su Pixel.
Tieni presente che:
- Nella voce vbmeta sono specificate più partizioni perché quelle partizioni sono protette da AVB.
- Tutte le partizioni AVB devono essere incluse, anche se solo
/vendor
è montato inizialmente. - Ricordati di aggiungere
slotselect
per le partizioni soggette ad A/B./ { 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"; }; }; }; }; };