Partycje ODM

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/*/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ę.

Utrzymywanie interfejsu ABI między partycjami

Rysunek 1. Utrzymywanie ABI między partycjami.

  • Nie ma stabilności ABI między partycjami odmvendor. Obie partycje muszą zostać uaktualnione w tym samym czasie.
  • Partycje odmvendor mogą być od siebie zależne, ale partycja vendor musi działać bez partycji odm.
  • ABI między odmsystem jest taki sam jak ABI między vendorsystem.

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 partycji
  • PRODUCT_USE_DYNAMIC_PARTITIONS i BOARD_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 w PRODUCT_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 vendorsystem).

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.