W Androidzie 10 główny system plików nie jest już
znajduje się w folderze ramdisk.img
i zostanie scalone z
system.img
(czyli system.img
jest zawsze tworzony jako
jeśli ustawiono BOARD_BUILD_SYSTEM_ROOT_IMAGE
). Urządzenia
Wprowadzenie na rynek z Androidem 10:
- Użyj układu partycji systemowej jako roota (automatycznie egzekwowanego przez bez możliwości zmiany jego działania).
- Musisz użyć dysku RAM, który jest wymagany w przypadku dm-linear.
BOARD_BUILD_SYSTEM_ROOT_IMAGE
musi mieć wartośćfalse
. To ustawienie służy tylko do rozróżniania urządzeń korzystających z dysku ramdisk a także na urządzeniach, które nie korzystają z dysku RAM (zamiast tegosystem.img
).
Konfiguracja systemu jako roota różni się w przypadku Androida 9 i Androida 9.
Android 10. W Androidzie 9 systemowym
BOARD_BUILD_SYSTEM_ROOT_IMAGE
ma wartość
true
, co wymusza na kompilacji połączenie głównego systemu plików z
system.img
, następnie podłącz system.img
jako plik główny
(rootfs). Ta konfiguracja jest obowiązkowa w przypadku urządzeń
wprowadza na rynek Androida 9, ale jest opcjonalne na urządzeniach przechodzących na
Androida 9 i urządzeń z starszymi wersjami Androida. Na urządzeniu z Androidem
10 konfiguracji systemu jako roota, kompilacja zawsze
scala komórki $TARGET_SYSTEM_OUT
i $TARGET_ROOT_OUT
w
system.img
; Ta konfiguracja jest domyślnym zachowaniem na wszystkich urządzeniach
z Androidem 10.
Android 10 wprowadza kolejne zmiany partycje dynamiczne, system partycjonowania przestrzeni użytkownika, który umożliwia bezprzewodowe aktualizacje tworzyć, niszczyć i zmieniać ich rozmiar. W ramach tej zmiany jądro nie może już podłączyć logicznej partycji systemu na urządzeniach uruchomionych Android 10, więc ta operacja jest obsługiwana przez pierwszy zainicjowanie etapu.
W poniższych sekcjach opisano wymagania systemowe dla OTA dostępne tylko dla systemu: wskazówki dotyczące aktualizowania urządzeń, aby umożliwić korzystanie z systemu jako roota (w tym zmiany układu partycji i wymagania dotyczące jądra dm-verity). Dla: szczegółowe informacje na temat zmian w pamięci RAM, zobacz Ramdysk Partycje.
Informacje o aktualizacjach OTA działających tylko w sposób systemowy
OTA dostępne tylko dla systemu, które umożliwiają aktualizowanie wersji Androida
system.img
i product.img
bez zmiany innych
wymaga układu partycji systemowej jako roota. Wszystkie urządzenia z Androidem
10 musi używać układu partycji systemu jako roota,
włączyć OTA dostępne tylko dla systemu.
- na urządzeniach A/B, które instalują partycję
system
jako rootfs, są już używane jako system główny i nie wymagają zmian w celu obsługi systemowych OTA. - urządzeń innych niż A/B, które instalują partycję
system
pod adresem/system
, należy zaktualizować, aby używać układ partycji systemu jako roota do obsługi systemowych OTA.
Aby uzyskać szczegółowe informacje na temat urządzeń typu A/B i urządzeń innych niż A/B, zapoznaj się z artykułem Aktualizacje systemu typu A/B (łatwo).
Użyj nakładki dostawcy (<=AOSP 14)
Nakładka dostawcy umożliwia nakładanie zmian na vendor
podczas uruchamiania urządzenia. Nakładka dostawcy to zestaw modułów dostawców w
partycji product
, które są nakładane na vendor
.
partycjonuj podczas uruchamiania urządzenia, zastępując i dodając do istniejących modułów.
Po uruchomieniu urządzenia proces init
kończy pierwszy
etapie montowania i odczytuje właściwości domyślne. Następnie wyszukuje
/product/vendor_overlay/<target_vendor_version>
i punkty montowania
każdego podkatalogu w odpowiednim katalogu partycji vendor
,
jeśli są spełnione te warunki:
/vendor/<overlay_dir>
istnieje./product/vendor_overlay/<target_vendor_version>/<overlay_dir>
ma ten sam kontekst pliku co/vendor/<overlay_dir>
.init
może podłączać do kontekstu pliku/vendor/<overlay_dir>
Wdróż nakładkę dostawcy
Zainstaluj pliki z nakładkami dostawców w:
/product/vendor_overlay/<target_vendor_version>
Te pliki
nakładać partycję vendor
po włączeniu urządzenia, zastępując pliki
o tej samej nazwie i dodawać nowe pliki. Nie można usunąć plików w nakładce dostawcy
z partycji vendor
.
Pliki nakładek dostawców muszą mieć ten sam kontekst co pliki docelowe
są zastępowane na partycji vendor
. Domyślnie pliki w folderze
Katalog /product/vendor_overlay/<target_vendor_version>
mają kontekst vendor_file
. Niezgodność kontekstu pliku
między plikami nakładek dostawców a zastępowanymi plikami, określ to w
dla konkretnego urządzenia. Kontekst pliku jest ustawiany na poziomie katalogu. Jeśli
kontekstu pliku katalogu nakładek dostawcy nie pasuje do katalogu docelowego,
a w ustawieniach konkretnego urządzenia nie zostanie określony prawidłowy kontekst pliku,
że katalog nakładek dostawcy nie jest nałożony na katalog docelowy.
Aby można było używać nakładki dostawcy, jądro musi włączyć OverlayFS przez ustawienie
CONFIG_OVERLAY_FS=y
Jądro musi być też scalone z
typowe jądro w wersji 4.4 lub nowszej albo zainstalowane poprawki z "overlayfs:
override_creds=off option bypass creator_cred"
.
Przykład implementacji nakładki dostawcy
Ta procedura przedstawia wdrożenie nakładki dostawcy, która nakłada
katalogi /vendor/lib/*
, /vendor/etc/*
i
/vendor/app/*
-
Dodaj gotowe pliki dostawcy do
device/<vendor>/<target>/vendor_overlay/<target_vendor_version>/
:device/google/device/vendor_overlay/28/lib/libfoo.so device/google/device/vendor_overlay/28/lib/libbar.so device/google/device/vendor_overlay/28/etc/baz.xml device/google/device/vendor_overlay/28/app/qux.apk
-
Zainstaluj gotowe pliki dostawcy w
product/vendor_overlay
indevice/google/device/device.mk
:PRODUCT_COPY_FILES += \ $(call find-copy-subdir-files,*,device/google/device/vendor_overlay,$(TARGET_COPY_OUT_PRODUCT)/vendor_overlay)
-
Określ kontekst plików, jeśli docelowe pliki partycji
vendor
mają konteksty inne niżvendor_file
. Ponieważ/vendor/lib/*
używa kontekstuvendor_file
, ten nie zawiera tego katalogu.Dodaj następujące elementy do
device/google/device-sepolicy/private/file_contexts
:/(product|system/product)/vendor_overlay/[0-9]+/etc(/.*)? u:object_r:vendor_configs_file:s0 /(product|system/product)/vendor_overlay/[0-9]+/app(/.*)? u:object_r:vendor_app_file:s0
-
Zezwalaj procesowi
init
na podłączanie nakładki dostawcy w pliku kontekstów innych niżvendor_file
. Ponieważinit
proces ma już uprawnienia do podłączania w kontekścievendor_file
, ten przykład nie definiuje zasady dlavendor_file
.Dodaj następujące elementy do
device/google/device-sepolicy/public/init.te
:allow init vendor_configs_file:dir mounton; allow init vendor_app_file:dir mounton;
Nakładka z prośbą o sprawdzenie dostawcy
Aby sprawdzić konfigurację nakładki dostawcy, dodaj pliki w
/product/vendor_overlay/<target_vendor_version>/<overlay_dir>
i sprawdź, czy pliki w folderze
/vendor/<overlay_dir>
W przypadku kompilacji userdebug
dostępny jest moduł testowy dotyczący testu Atest:
$ atest -v fs_mgr_vendor_overlay_test
Aktualizacja do wersji systemowej jako roota
Aby zaktualizować urządzenia inne niż A/B tak, aby używały systemu operacyjnego jako root, musisz zaktualizować
schemat partycjonowania dla boot.img
i system.img
, ustawiony
up dm-verity i usuń wszelkie zależności rozruchu na poziomie głównym urządzenia.
foldery.
Zaktualizuj partycje
W odróżnieniu od urządzeń A/B, w których /boot
jako
partycji recovery.
Urządzenia inne niż A/B muszą utrzymywać partycję /recovery
oddzielnie, ponieważ nie mają zastępczej partycji przedziału (na przykład
od boot_a
do boot_b
). Jeśli /recovery
to
usunięte na urządzeniach innych niż A/B i podobne do schematu A/B: tryb przywracania
może ulec awarii podczas nieudanej aktualizacji partycji /boot
. Dla:
z tego powodu partycja /recovery
musi być typu
oddzielne partycjonowanie od /boot
dla urządzeń innych niż A/B, co oznacza,
obraz przywracania jest nadal aktualizowany z odroczeniem
tak samo jak na urządzeniach z Androidem 8.1.0 lub starszym).
W tabeli poniżej znajdziesz różnice w partycjach obrazów w przypadku urządzeń innych niż A/B przed i po Androidzie 9.
Obraz | Ramdisk (przed 9) | System jako root (po 9) |
---|---|---|
boot.img |
Zawiera jądro i ramdisk.img :
ramdisk.img -/ - init.rc - init - etc -> /system/etc - system/ (mount point) - vendor/ (mount point) - odm/ (mount point) ... |
Zawiera tylko normalne jądro rozruchowe. |
recovery.img |
Zawiera jądro i plik przywracania
ramdisk.img |
|
system.img |
Zawiera:
system.img -/ - bin/ - etc - vendor -> /vendor - ... |
Zawiera scaloną treść oryginalnych plików system.img i
ramdisk.img :
system.img -/ - init.rc - init - etc -> /system/etc - system/ - bin/ - etc/ - vendor -> /vendor - ... - vendor/ (mount point) - odm/ (mount point) ... |
Same partycje się nie zmieniają. używanie zarówno dysku RAM, jak i systemu jako roota następujący schemat partycjonowania:
/boot
/system
/system
/recovery
/vendor
itp.
Skonfigurujdm-verity
W systemie operacyjnym jako root jądro musi zamontować system.img
w
/
(punkt podłączania) z
dm-verity. AOSP obsługuje następujące zasoby dm-verity
implementacji na koncie system.img
.
Vboot 1.0
W przypadku vboot 1.0 jądro musi być analizowane
Tylko na Androida
metadane włączone
/system
, a następnie przekonwertuj na
parametry dm-verity do skonfigurowania dm-verity (wymaga
poprawki jądra).
Poniższy przykład pokazuje ustawienia dotyczące wersji Dm-verity dla systemu operacyjnego jako roota
wiersz poleceń jądra:
ro root=/dev/dm-0 rootwait skip_initramfs init=/init dm="system none ro,0 1 android-verity /dev/sda34" veritykeyid=id:7e4333f9bba00adfe0ede979e28ed1920492b40f
Vboot 2.0
Dla vboot 2.0
(AVB), program rozruchowy musi się zintegrować
external/avb/libavb, który następnie analizuje
deskryptor hashtree dla: /system
, konwertuje
go do
parametrów dm-verity, a na koniec przekazuje je do funkcji
z jądra systemu operacyjnego. (Deskryptory hashtagu /system
może znajdować się w /vbmeta
lub w samym /system
).
vboot 2.0 wymaga tych poprawek jądra:
- https://android-review.googlesource.com/#/c/kernel/common/+/158491/
- poprawki jądra 4.4, poprawki jądra 4.9 itp.
Poniższy przykład pokazuje ustawienia dotyczące wersji Dm-verity dla systemu operacyjnego jako roota wiersz poleceń jądra:
ro root=/dev/dm-0 rootwait skip_initramfs init=/init dm="1 vroot none ro 1,0 5159992 verity 1 PARTUUID=00000016-0000-0000-0000-000000000000 PARTUUID=00000016-0000-0000-0000-000000000000 4096 4096 644999 644999 sha1 d80b4a8be3b58a8ab86fad1b498640892d4843a2 8d08feed2f55c418fb63447fec0d32b1b107e42c 10 restart_on_corruption ignore_zero_blocks use_fec_from_device PARTUUID=00000016-0000-0000-0000-000000000000 fec_roots 2 fec_blocks 650080 fec_start 650080"
Użyj folderów głównych na danym urządzeniu
Z systemem jako root, po ogólnym obrazie systemu
(GSI) jest migana na urządzeniu (i przed uruchomieniem).
testy Vendor Test Suite), dowolne
foldery główne na poszczególnych urządzeniach za pomocą funkcji BOARD_ROOT_EXTRA_FOLDERS
zostały usunięte, ponieważ cała zawartość katalogu głównego została zastąpiona
do systemu GSI systemu
jako poziomego głównego. Usunięcie tych folderów może spowodować, że urządzenie
nie można uruchomić rozruchu, jeśli istnieje zależność od folderów głównych na danym urządzeniu
(służą na przykład jako punkty podłączania).
Aby uniknąć tego problemu, nie używaj BOARD_ROOT_EXTRA_FOLDERS
do:
dodawania folderów głównych przeznaczonych na konkretne urządzenia. Jeśli musisz określić punkt montowania na poziomie urządzenia
punktów, użyj funkcji /mnt/vendor/<mount point>
(dodanej w tych
list zmian). Takie punkty podłączania specyficzne dla dostawcy mogą być
określona bezpośrednio w drzewie urządzeń fstab
(na potrzeby pierwszego etapu)
mount) i /vendor/etc/fstab.{ro.hardware}
bez
dodatkowa konfiguracja (ponieważ fs_mgr
tworzy je w
/mnt/vendor/*
).