Na urządzeniach z wysokością musi być włączone podłączenie pierwszego etapu, aby upewnić się,
Przeglądarka init
może załadować rozszerzone zabezpieczenia Linuksa
(SELinux) fragmenty zasad w obszarach system
i
Partycje: vendor
. Ten dostęp umożliwia też ładowanie jądra systemu
i modułów od razu po uruchomieniu jądra.
Aby możliwe było wcześniejsze podłączenie, Android musi mieć dostęp do systemów plików w
w których znajdują się poszczególne moduły. Android 8.0 i nowszy obsługuje podłączanie
/system
, /vendor
lub /odm
już od
pierwszego etapu init
(czyli przed zainicjowaniem SElinux).
Wpisy Fstab
W Androidzie 9 i starszych wersjach urządzenia mogą określać wpisy fstab
dla
wcześnie podłączone partycje za pomocą drzewa urządzenia
(DTO). Na Androidzie 10 i nowszych
urządzenia muszą mieć określone wpisy fstab
dotyczące wcześniej podłączonych partycji
używając w pierwszym etapie pliku fstab
.
ramdisk. Android,
10 wprowadza te flagi fs_mgr
do użycia w pliku fstab
:
first_stage_mount
oznacza, że partycja została podłączona. przez jego rozpoczęcie.logical
oznacza, że jest to partycji dynamicznej.avb=vbmeta-partition-name
określavbmeta
partycja. Pierwszy etap inicjuje tę partycję przed podłączeniem innych partycji. Argument tej flagi można pominąć, jeśli partycjavbmeta
wpisu została już określona przez kolejny wpisfstab
w poprzednim wierszu.
Poniższy przykład pokazuje wpisy fstab
służące do ustawienia
Partycje system
, vendor
i product
jako partycje logiczne (dynamiczne).
#<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
W tym przykładzie dostawca określa partycję vbmeta
za pomocą parametru
flaga fs_mgr
avb=vbmeta
, ale product
pomija argument vbmeta
, ponieważ dostawca już go dodał
vbmeta
.
Na urządzeniach z Androidem 10 lub nowszym musi znajdować się tag
fstab
w dysku RAM i w folderze vendor
partycji danych.
Ramdysk
Lokalizacja pliku fstab
w pamięci RAM zależy od tego, jak urządzenie
korzysta z dysku ramdisk.
Urządzenia z dyskiem pamięci RAM muszą umieścić fstab
w katalogu głównym dysku RAM. Jeśli urządzenie ma zarówno dysk RAM,
nie są wymagane żadne zmiany w nim. Przykład:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RAMDISK)/fstab.$(PRODUCT_PLATFORM)
Urządzenia korzystające z przywracania pamięci RAM muszą używać
parametr wiersza poleceń jądra androidboot.force_normal_boot=1
do
wybrać, czy uruchomić urządzenie z Androidem, czy kontynuować przywracanie. Urządzenia
Aplikacje na urządzeniach z Androidem 12 lub nowszym
jądro w wersji 5.10 lub nowszej musi używać polecenia rozruchowego do przekazywania
androidboot.force_normal_boot=1
. W
na tych urządzeniach, inicjowanie pierwszego etapu powoduje przejście do
/first_stage_ramdisk
.
więc urządzenia muszą umieszczać plik fstab
w
$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk
Przykład:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_RECOVERY)/root/first_stage_ramdisk/fstab.$(PRODUCT_PLATFORM)
Dostawca
Wszystkie urządzenia muszą umieścić kopię pliku fstab
w
/vendor/etc
Dzieje się tak, ponieważ rozpoczęcie pierwszego etapu uwalnia
ramdisk po zakończeniu wczesnego podłączania partycji i wykonaniu
przełącz operację główną, aby przenieść punkt montowania w: /system
na
/
Wszystkie kolejne operacje wymagające dostępu do fstab
musisz więc używać kopii w folderze /vendor/etc
. Przykład:
PRODUCT_COPY_FILES += device/google/<product-name>/fstab.hardware:$(TARGET_COPY_OUT_VENDOR)/etc/fstab.$(PRODUCT_PLATFORM)
Wcześniejsze podłączenie partycji, VBoot 1.0
Wymagania dotyczące wczesnego podłączenia partycji za pomocą VBoot 1.0 to między innymi:
- Ścieżki węzłów urządzeń muszą używać dowiązania symbolicznego
by-name
w Wpisyfstab
i drzewa urządzeń. Na przykład zamiast określać za pomocą/dev/block/mmcblk0pX
, upewnij się, że partycje są a węzeł urządzenia to/dev/block/…./by-name/{system,vendor,odm}
- Podano ścieżki dla
PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION
iCUSTOM_IMAGE_VERITY_BLOCK_DEVICE
w konfiguracji urządzenia dla: danego produktu (czyli wdevice/oem/project/device.mk
) musi być zgodny z wartością odpowiednie węzły urządzeń blokowych określoneby-name
w Wpisy:fstab
/devicetree. Przykład: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
- Wpisy podawane za pomocą nakładek drzewa urządzeń nie mogą się powtarzać w
Fragmenty pliku:
fstab
. Na przykład podczas określania wpisu dla podłączenie/vendor
na drzewie urządzeń (plikfstab
) nie może powtarzać tego wpisu. - Partycje wymagające uprawnień
verifyatboot
nie mogą być podłączone wcześniej (nie jest to możliwe). - Tryb/stan poprawności w przypadku zweryfikowanych partycji musi być określony w
kernel_cmdline
z użyciem opcjiandroidboot.veritymode
(obowiązujące wymagania).
Wcześniejsze zamontowanie drzewa urządzenia, VBoot 1.0
W Androidzie 8.x lub nowszym aplikacja init
analizuje drzewo urządzeń i
tworzy fstab
wpisy umożliwiające podłączenie partycji na wczesnym etapie
pierwszego etapu. Wpis fstab
ma następujący format:
src mnt_point type mnt_flags fs_mgr_flags
Właściwości Devicetree zostały zdefiniowane tak, aby przypominały ten format:
fstab
pozycji musi być poniżej/firmware/android/fstab
w drzewie urządzeń i musi mieć ustaw zgodny ciąg naandroid,fstab
.- Każdy węzeł w jednostce organizacyjnej
/firmware/android/fstab
jest traktowany jako jeden wpis dotyczący wcześniejszego podłączeniafstab
. Węzeł musi mieć: zdefiniowane właściwości:dev
musi wskazywać węzeł urządzenia reprezentujący partycjaby-name
type
musi być typem systemu plików (jak wfstab
plików)mnt_flags
musi być rozdzielaną przecinkami listą flag podłączenia (tak jak wfstab
plikach)- Pole
fsmgr_flags
musi być listą urządzeń z Androidemfs_mgr flags
(tak jak w przypadku plikówfstab
)
- Partycje A/B muszą mieć opcję
slotselect fs_mgr
. - Partycje z włączoną obsługą dm-verity muszą mieć
verify fs_mgr
.
Przykład: /system i /vendor w N6P
Poniższy przykład pokazuje wczesny punkt podłączania drzewa urządzenia dla: system
i vendor
partycji na Nexusie 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"; }; }; }; }; };
Przykład: /vendor na urządzeniu Pixel
Poniższy przykład pokazuje wczesny punkt podłączania drzewa urządzenia dla: /vendor
na Pixelu (pamiętaj o dodaniu parametru slotselect
w przypadku partycji podlegających
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"; }; }; }; }; };
Wcześniejsze podłączanie partycji, VBoot 2.0
VBoot 2.0 to weryfikacja podczas uruchamiania Androida (AVB). Wymagania wstępne Za pomocą VBoot 2.0 partycje podłączenia to:
- Ścieżki węzłów urządzeń muszą używać dowiązania symbolicznego
by-name
w: Wpisyfstab
i drzewa urządzeń. Na przykład zamiast określać partycje za pomocą/dev/block/mmcblk0pX
, upewnij się, że partycje mają nazwę, a węzeł urządzenia to/dev/block/…./by-name/{system,vendor,odm}
- Kompiluj zmienne systemowe (np.
PRODUCT_{SYSTEM,VENDOR}_VERITY_PARTITION
iCUSTOM_IMAGE_VERITY_BLOCK_DEVICE
) używane w VBoot 1.0 NIE są wymagane przez VBoot 2.0. Zamiast tego utwórz zmienne wprowadzone w VBoot 2.0. (w tymBOARD_AVB_ENABLE := true
) powinien być zdefiniowany; dla pełną konfigurację, zapoznaj się z artykułem Utwórz integrację systemu dla AVB. - Wpisy podawane za pomocą nakładek drzewa urządzeń nie mogą się powtarzać w
Fragmenty pliku:
fstab
. Jeśli na przykład określisz wpis do podłączenie/vendor
na drzewie urządzeń (plikfstab
) nie może powtarzać tego wpisu. - VBoot 2.0 nie obsługuje elementu
verifyatboot
(wczesnego podłączenia) jest włączona lub nie. - Tryb/stan poprawności w przypadku zweryfikowanych partycji musi być określony w
kernel_cmdline
za pomocą:androidboot.veritymode
(obecne wymaganie). Pamiętaj o wprowadzeniu tych poprawek w przypadku: AVB:
Wcześniejsze zamontowanie drzewa urządzenia, VBoot 2.0
Konfiguracja w drzewie urządzeń dla VBoot 2.0 jest taka sama jak w VBoot 1.0, z parametrem te wyjątki:
fsmgr_flag
przełączono zverify
naavb
- Wszystkie partycje z metadanymi AVB muszą być we wpisie VBMeta w
Devicetree, nawet jeśli partycja nie jest podłączana wcześniej (na przykład
/boot
).
Przykład: /system i /vendor w systemie N5X
Poniższy przykład pokazuje wczesny punkt montowania drzewa urządzenia dla
Partycje system
i vendor
na Nexusie 5X. Uwaga:
- Interfejs
/system
jest podłączony za pomocą AVB, a/vendor
to jest podłączony bez weryfikacji integralności. - Nexus 5X nie ma partycji
/vbmeta
, więc Narzędzie vbmeta znajduje się na końcu partycji/boot
(szczegóły zapoznaj się z listą zmian 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"; }; }; }; }; };
Przykład: /vendor na urządzeniu Pixel
Przykład poniżej pokazuje wczesne mocowanie /vendor
na Pixelu.
Uwaga:
- We wpisie vbmeta określono więcej partycji, ponieważ te partycje to chronione przez system AVB.
- Należy uwzględnić wszystkie partycje AVB, nawet jeśli tylko
/vendor
z wyprzedzeniem. - Pamiętaj, żeby dodać
slotselect
w przypadku partycji podlegających kontroli 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"; }; }; }; }; };