Android 10 obsługuje tworzenie partycji odm
za pomocą systemu kompilacji Androida.
Partycje ODM
Producenci oryginalnych projektów (ODM) dostosowują pakiety dostawców systemów na chipie (SoC) do swoich urządzeń (płyt). Umożliwia to implementację modułów jądra dla komponentów specyficznych dla płyty, demonów specyficznych dla płyty lub własnych funkcji na warstwach abstrakcji sprzętowej (HAL). Mogą też chcieć wymienić lub dostosować komponenty SoC.
W starszych wersjach Androida takie dostosowania uniemożliwiały używanie pojedynczego obrazu dostawcy na urządzeniach z tym samym układem SoC (lub z różnymi układami SoC, ale z tej samej rodziny). W Androidzie 10 i nowszych możesz użyć osobnej partycji odm
na potrzeby personalizacji, co umożliwia korzystanie z jednego obrazu dostawcy na potrzeby wielu kodów SKU sprzętu.
Korzystanie z partycji produktu i ODM
Android 9 dodał obsługę tworzenia partycji product
, co umożliwia korzystanie z jednego obrazu systemu dla wielu SKU oprogramowania dostarczanych przez różne obrazy product.img
. Partycja product
jest przeznaczona dla kodów SKU oprogramowania, a partycja odm
– dla kodów SKU sprzętu.
W przypadku partycji dedykowanych produktów i ODM możesz użyć partycji system
do przechowywania kodu ogólnego, który można udostępniać wielu SKU oprogramowania, oraz partycji vendor
do przechowywania kodu BSP dla konkretnego SoC, który można udostępniać na wielu urządzeniach z użyciem danego SoC.
Korzystanie z oddzielnych partycji ma pewne wady, takie jak trudności w zarządzaniu miejscem na dysku (np. musisz zarezerwować ograniczoną ilość miejsca na przyszłe potrzeby). W Androidzie 10 partycje dynamiczne eliminują problem z dyskiem i umożliwiają partycjonowanie urządzenia podczas aktualizacji bezprzewodowej (OTA).
Komponenty ODM
Partycja odm
zawiera te komponenty specyficzne dla ODM (podobnie jak partycja vendor
), które są wymienione w tabeli poniżej.
Komponent specyficzny dla ODM | Lokalizacja |
---|---|
Moduły jądra do załadowania (LKM) | /odm/lib/modules/*.ko |
Biblioteki natywne | /odm/lib[64] |
HAL | /odm/lib[64]/hw |
SEPolicy | /odm/etc/selinux |
Dane obiektu VINTF | /odm/etc/vintf |
init.rc
pliki |
/odm/etc/init |
Właściwości systemowe | /odm/build.prop |
Nakładki zasobów środowiska wykonawczego (RRO) | /odm/overlay/*.apk |
Aplikacje | /odm/app/*.apk |
Priv-apps | /odm/priv-app/*.apk |
Biblioteki Java | /odm/framework/*.jar |
Konfiguracje systemu Android Framework | /odm/etc/sysconfig/* i /odm/etc/permissions/* |
Brak obrazów niestandardowych
Nie używaj obrazów niestandardowych, ponieważ nie są one obsługiwane w tych przypadkach:
- Instalacja modułu na określonym urządzeniu docelowym. Obrazy niestandardowe umożliwiają kopiowanie artefaktów do obrazu, ale nie można zainstalować modułu na określonej partycji, podając partycję docelową jako część reguły kompilacji.
- Soong.
custom_images
nie można skompilować za pomocą systemu kompilacji Soong. - Aktualizacja OTA. Obrazy niestandardowe są używane jako obrazy fabryczne ROM, których nie można aktualizować przez OTA.
Zachowanie interfejsów ABI między partycjami
Partycja odm
jest rozszerzeniem partycji vendor
. Jeśli chodzi o stabilność interfejsu binarnego aplikacji (ABI), weź pod uwagę tę architekturę.

Rysunek 1. Utrzymywanie ABI między partycjami.
- Nie ma stabilności ABI między partycjami
odm
ivendor
. Obie partycje muszą zostać uaktualnione w tym samym czasie. - Partycje
odm
ivendor
mogą być od siebie zależne, ale partycjavendor
musi działać bez partycjiodm
. - ABI między
odm
asystem
jest taki sam jak ABI międzyvendor
asystem
.
Bezpośrednie interakcje między partycją product
a partycją vendor
lub odm
nie są dozwolone. (Jest to wymuszane przez SEpolicy).
Wdrażanie partycji ODM
Przed wdrożeniem nowej partycji zapoznaj się z powiązanymi zmianami w AOSP.
Konfigurowanie partycji ODM
Aby skonfigurować partycje odm
, użyj tych flag kompilacji:
BOARD_ODMIMAGE_PARTITION_SIZE
dla stałego rozmiaru partycjiPRODUCT_USE_DYNAMIC_PARTITIONS
iBOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
w przypadku rozmiaru dynamicznej partycji- Typ systemu plików
BOARD_ODMIMAGE_FILE_SYSTEM_TYPE
używany dla obrazu ODM PRODUCT_ODM_PROPERTIES
dla/odm/build.prop
do użytku w$(call inherit-product path/to/device.mk)
, jak wPRODUCT_ODM_PROPERTIES += product.abc=ok
Instalowanie modułu na partycji ODM
Aby zainstalować moduł na partycji odm
, użyj tych flag kompilacji:
device_specific: true
w:Android.bp
LOCAL_ODM_MODULE := true
w:Android.mk
Włączanie weryfikacji podczas uruchamiania
Aby zapobiec modyfikowaniu partycji odm
przez złośliwe oprogramowanie, włącz zweryfikowane uruchamianie Androida (AVB) dla tych partycji (tak samo jak w przypadku partycji vendor
i system
).
Aby włączyć AVB, dodaj parametr kompilacji BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS
. Szczegółowe informacje o konfigurowaniu AVB na partycjach dynamicznych znajdziesz w artykule Zmiany w konfiguracji AVB.
Traktuj /odm jako inną partycję /vendor
Aby system traktował partycję odm
jako partycję vendor
, zastąp wszystkie zakodowane na stałe odwołania vendor
zestawem partycji zorientowanych na sprzęt (obecnie odm
i vendor
). Ważne lokalizacje odwołań vendor
na platformie to dynamic linker, menedżer pakietów i shell/libc
.