Partycje ODM

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.

Utrzymanie ABI pomiędzy partycjami
Rysunek 1. Utrzymanie ABI pomiędzy partycjami
  • Nie ma stabilności ABI między partycjami odm i vendor . Obie partycje muszą zostać zaktualizowane w tym samym czasie.
  • Partycje odm i vendor mogą od siebie zależeć, ale partycja vendor musi działać bez partycji odm .
  • ABI pomiędzy odm a system jest takie samo jak ABI pomiędzy vendor a system .

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 i BOARD_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 w PRODUCT_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 w Android.bp
  • LOCAL_ODM_MODULE := true w Android.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 .