Android 10 obsługuje tworzenie partycji odm
przy użyciu systemu kompilacji Androida.
Informacje o partycjach ODM
Producenci oryginalnych projektów (ODM) dostosowują pakiety obsługi płyt systemowych (SoC) dostawców (BSP) do swoich konkretnych urządzeń (swoich płyt). Umożliwia im to implementację modułów jądra dla komponentów specyficznych dla płyty, demonów specyficznych dla płyty lub własnych funkcji w warstwach abstrakcji sprzętu (HAL). Mogą również chcieć wymienić lub dostosować komponenty SoC.
W niższych wersjach Androida takie dostosowania uniemożliwiały użycie obrazu jednego dostawcy dla urządzeń z tym samym SoC (lub z różnymi SoC, ale w tej samej rodzinie). W systemie Android 10 i nowszych wersjach można używać osobnej partycji odm
do dostosowywania, co umożliwia używanie obrazu jednego dostawcy dla wielu jednostek SKU sprzętu.
Korzystanie z partycji produktu i ODM
W systemie Android 9 dodano obsługę tworzenia partycji product
, umożliwiając użycie jednego obrazu systemu dla wielu jednostek SKU oprogramowania dostarczanych w różnych obrazach product.img
. Podczas gdy partycja product
jest przeznaczona dla jednostek SKU oprogramowania, partycja odm
jest przeznaczona dla jednostek SKU sprzętu.
Dzięki dedykowanym partycjom produktu i ODM można używać partycji system
do hostowania ogólnego kodu do udostępniania wielu jednostek SKU oprogramowania, a partycji vendor
do hostowania kodu BSP specyficznego dla SoC w celu udostępniania go wielu urządzeniom w oparciu o dany SoC.
Używanie oddzielnych partycji ma wady, takie jak trudności w zarządzaniu miejscem na dysku (na przykład trzeba zarezerwować ograniczoną ilość miejsca na przyszły rozwój). Jednak obsługa partycji dynamicznych w systemie Android 10 eliminuje problem z dyskiem i umożliwia ponowne partycjonowanie urządzenia podczas aktualizacji OTA .
Komponenty ODM
Partycja odm
zawiera następujące komponenty specyficzne dla ODM (podobne do partycji vendor
), wymienione w poniższej tabeli.
Komponent specyficzny dla ODM | Lokalizacja |
---|---|
Ładowalne moduły jądra (LKM) | /odm/lib/modules/*.ko |
Biblioteki rodzime | /odm/lib[64] |
HAL | /odm/lib[64]/hw |
SEPolityka | /odm/etc/selinux |
Dane obiektu VINTF | /odm/etc/vintf |
pliki init.rc | /odm/etc/init |
Właściwości systemu | /odm/build.prop |
Nakładki zasobów środowiska wykonawczego (RRO) | /odm/overlay/*.apk |
Aplikacje | /odm/app/*.apk |
Aplikacje prywatne | /odm/priv-app/*.apk |
Biblioteki Javy | /odm/framework/*.jar |
Konfiguracje systemu Android Framework | /odm/etc/sysconfig/* i /odm/etc/permissions/* |
Brak niestandardowych obrazów
Nie używaj niestandardowych obrazów , ponieważ nie obsługują one następujących elementów:
- Instalacja modułu pod konkretny cel. Obrazy niestandardowe obsługują kopiowanie artefaktów do obrazu, ale nie umożliwiają zainstalowania modułu na określonej partycji poprzez określenie partycji docelowej jako części reguły kompilacji.
- Wkrótce.
custom_images
nie można zbudować przy użyciu systemu kompilacji Soong. - Aktualizacja OTA. Obrazy niestandardowe są używane jako fabryczne obrazy ROM, których nie można edytować w trybie OTA.
Utrzymywanie ABI pomiędzy partycjami
Partycja odm
jest rozszerzeniem partycji vendor
. Rozważając stabilność interfejsu binarnego aplikacji (ABI), należy pamiętać o poniższej architekturze.
- Nie ma stabilności ABI między partycjami
odm
ivendor
. Obie partycje muszą zostać zaktualizowane w tym samym czasie. - Partycje
odm
ivendor
mogą od siebie zależeć, ale partycjavendor
musi działać bez partycjiodm
. - ABI pomiędzy
odm
asystem
jest takie samo jak ABI pomiędzyvendor
asystem
.
Bezpośrednia interakcja pomiędzy partycją product
a partycją vendor
lub odm
jest niedozwolona . (Jest to egzekwowane przez SEpolicy.)
Implementacja partycji ODM
Przed wdrożeniem nowej partycji przejrzyj powiązane zmiany AOSP .
Konfigurowanie partycji ODM
Aby skonfigurować partycje odm
, dołącz następujące flagi kompilacji:
-
BOARD_ODMIMAGE_PARTITION_SIZE
dla stałego rozmiaru partycji -
PRODUCT_USE_DYNAMIC_PARTITIONS
iBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
dla dynamicznego rozmiaru partycji -
BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
typ systemu plików używany dla obrazu ODM -
PRODUCT_ODM_PROPERTIES
dla/odm/build.prop
do użycia w obrębie$(call inherit-product path/to/device.mk)
, jak wPRODUCT_ODM_PROPERTIES += product.abc=ok
Instalowanie modułu na partycji ODM
Użyj tych flag kompilacji, aby zainstalować moduł na partycji odm
:
-
device_specific: true
wAndroid.bp
-
LOCAL_ODM_MODULE := true
wAndroid.mk
Włączanie zweryfikowanego rozruchu
Aby zapobiec manipulowaniu partycjami odm
przez złośliwe oprogramowanie, włącz Android Verified Boot (AVB) dla tych partycji (tak samo jak w przypadku partycji vendor
i partycji system
).
Aby włączyć AVB, dołącz flagę kompilacji BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
. Aby uzyskać szczegółowe informacje na temat konfigurowania AVB na partycjach dynamicznych, zobacz Zmiany w konfiguracji AVB .
Traktowanie /odm jako kolejnej partycji /vendor
Aby mieć pewność, że system będzie obsługiwał partycję odm
jako partycję vendor
, zastąp wszelkie zakodowane na stałe odniesienia do vendor
zestawem partycji zorientowanych sprzętowo (obecnie odm
i vendor
). Godne uwagi lokalizacje referencyjne vendor
na platformie obejmują dynamiczny linker , menedżer pakietów i shell/libc
.