Partycje ODM

Android 10 zapewnia obsługę tworzenia odm partycje korzystające z systemu kompilacji Androida.

Informacje o partycjach ODM

Producenci oryginalnych elementów (ODM) dostosowują dostawcę rozwiązań SOC pakiety pomocy na płytach głównych (BSP) na ich konkretne urządzenia (płytki). Ten umożliwia wdrożenie modułów jądra dla komponentów specyficznych dla płytki. demony typowe dla płytek lub ich własne funkcje w warstwach abstrakcji sprzętowej (HAL). Może też wymienić lub dostosować komponenty SOC.

W niższych wersjach Androida takie dostosowania uniemożliwiały wykorzystanie dla urządzeń z tym samym układem SOC (lub z innymi układami, ale tej samej rodziny). W Androidzie 10 i nowszych możesz używać funkcji oddzielnej partycji odm na potrzeby dostosowywania, co pozwala Użyć jednego obrazu dostawcy dla wielu kodów SKU sprzętu.

Używaj partycji usługi i ODM

W Androidzie 9 dodano obsługę tworzenia product partycji, co umożliwia użycie jednego obrazu systemu z wieloma programami. Kody SKU dostarczone przez różne obrazy (product.img). Natomiast Partycja product jest przeznaczona dla kodów SKU oprogramowania, Partycja odm jest przeznaczona dla kodów SKU sprzętu.

Dzięki dedykowanym partycjom usługi i ODM możesz używać interfejsu system partycja do hostowania ogólnego kodu do współdzielenia przez wiele kodów SKU oprogramowania, Partycja vendor do hostowania kodu BSP powiązanego z SOC, który będzie współużytkowany na podstawie danego układu SOC.

Stosowanie osobnych partycji ma pewne wady, np. trudność w zarządzaniu miejsca na dysku (na przykład musisz zarezerwować ograniczoną ilość miejsca na przyszłość wzrost). Jednak w Androidzie 10 obsługa partycje dynamiczne rozwiązuje problem z dyskiem i powoduje ponowne partycjonowanie urządzenia podczas aktualizację bezprzewodową (OTA).

Komponenty ODM

Partycja odm zawiera te komponenty specyficzne dla ODM (podobnie jak w przypadku partycji vendor) wymienionej w tabeli poniżej.

Komponent specyficzny dla ODM Lokalizacja
Ładowane moduły jądra (LKM) /odm/lib/modules/*.ko
Biblioteki natywne /odm/lib[64]
Listy HAL /odm/lib[64]/hw
Zasady SE /odm/etc/selinux
Obiekt VINTF dane /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
Aplikacje prywatne /odm/priv-app/*.apk
Biblioteki Java /odm/framework/*.jar
Konfiguracje systemu Android Framework /odm/etc/sysconfig/*/odm/etc/permissions/*

Brak niestandardowych obrazów

Nie używaj niestandardowy obrazów, bo nie są w nich obsługiwane:

  • Instalacja modułu w określonym miejscu docelowym. Obrazy niestandardowe obsługują kopiowanie artefaktów do obrazu, ale nie zainstalować moduł w określonej partycji, określając partycję docelową. jako część reguły kompilacji.
  • Soong. Nie można skompilować za pomocą: custom_images czyli system kompilacji Soong.
  • Aktualizacja OTA. Obrazy niestandardowe są używane jako: które nie mogą być edytowane przez OTA.

Utrzymywanie interfejsów ABI między partycjami

Partycja odm jest rozszerzeniem vendor. partycji danych. Jeśli zastanawiasz się nad stabilnością interfejsu binarnego aplikacji (ABI), z myślą o takiej architekturze.

Utrzymywanie interfejsu ABI między partycjami

Rysunek 1. Obsługa interfejsu ABI między partycjami.

  • Brak stabilności ABI między odm a Liczba partycji: vendor. Obie partycje muszą zostać uaktualnione w tym samym czasie obecnie się znajdujesz.
  • Partycje odm i vendor mogą zależeć od siebie nawzajem, ale partycja vendor musi działać bez partycji odm.
  • Interfejs ABI między odm a system jest taki sam jak interfejsu ABI między vendor a system.

Bezpośrednia interakcja między partycją product a sekcją Partycja vendor lub odm nie jest dozwolone. Jest to egzekwowane przez zasadę SEpolicy.

Wdróż partycje ODM

Zanim zaimplementujesz nową partycję, sprawdź powiązany AOSP zmian.

Konfigurowanie partycji ODM

Aby skonfigurować partycje (odm), uwzględnij te flagi kompilacji:

  • BOARD_ODMIMAGE_PARTITION_SIZE w przypadku stałego rozmiaru partycji
  • PRODUCT_USE_DYNAMIC_PARTITIONS i BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE za partycja dynamiczna rozmiar
  • Typ systemu plików usługi BOARD_ODMIMAGE_FILE_SYSTEM_TYPE używany na potrzeby Obraz ODM
  • PRODUCT_ODM_PROPERTIES za /odm/build.prop dla użyj w elemencie $(call inherit-product path/to/device.mk), na przykład 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łącz weryfikację podczas uruchamiania

Aby zapobiec manipulacjom złośliwego oprogramowania na partycjach odm, włącz weryfikację podczas uruchamiania Androida (AVB) dla tych partycji (podobnie jak w przypadku vendor i system partycji).

Aby włączyć AVB, uwzględnij flagę kompilacji BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS Szczegółowe informacje na temat konfigurowania AVB na partycjach dynamicznych, patrz Konfiguracja AVB zmian.

Traktuj /odm jako kolejną partycję /dostawcę

Aby system obsługiwał partycję odm jako vendor partycji, zastąp wszystkie zakodowane na stałe vendor. z użyciem zestawu partycji sprzętowych (obecnie odm i vendor). Ciekawe: vendor lokalizacje referencyjne na platformie to m.in. dynamiczna tag łączący, pakiet menedżera i shell/libc.