Projekt migawek VNDK

Migawki VNDK mogą być używane przez obraz systemu w celu zapewnienia prawidłowych bibliotek VNDK dla obrazów dostawców, nawet jeśli obrazy systemu i dostawcy są zbudowane z różnych wersji Androida. Tworzenie migawki VNDK wymaga przechwycenia bibliotek VNDK jako migawki i oznaczenia ich numerem wersji. Obraz dostawcy może być powiązany z konkretną wersją VNDK, która zapewnia wymagane interfejsy ABI dla modułów w obrazie dostawcy. Jednakże w tej samej wersji VNDK biblioteki VNDK muszą być stabilne pod kątem ABI .

Projekt migawki VNDK obejmuje metody generowania gotowych wersji migawki VNDK z bieżącego obrazu systemu i instalowania tych gotowych bibliotek na partycji systemowej nowszej wersji Androida.

O bibliotekach VNDK

HIDL-HAL , wprowadzony w systemie Android 8.0, umożliwia oddzielne aktualizacje dla partycji systemowych i dostawców. VNDK definiuje zestawy bibliotek (rdzeniowy VNDK, VNDK-SP i LL-NDK), z którymi kod dostawcy może się łączyć, i blokuje dostawcom korzystanie z bibliotek, które nie znajdują się w zestawie VNDK. W rezultacie obraz dostawcy może zostać zbudowany i uruchomiony, jeśli do obrazu dostawcy zostaną dostarczone odpowiednie zestawy VNDK z obrazu systemu.

Rdzeń VNDK

Zestaw bibliotek z rdzeniem VNDK jest zainstalowany w /system/lib[64]/vndk-${VER} i jest dostępny tylko dla procesów dostawców z poziomem API równym ${VER} . Procesy systemowe nie mogą używać tych bibliotek i zamiast tego muszą korzystać z bibliotek zainstalowanych w /system/lib[64] . Ze względu na ścisłe ograniczenia przestrzeni nazw dla każdego procesu, biblioteki rdzenia VNDK są zabezpieczone przed podwójnym ładowaniem.

Aby dołączyć bibliotekę do rdzenia VNDK, dodaj następujące elementy do Android.bp :

vendor_available: true,
vndk: {
    enabled: true,
},

VNDK-SP

Biblioteki VNDK-SP są instalowane w /system/lib[64]/vndk-sp-${VER} i są dostępne dla procesów dostawców i procesów systemowych (poprzez biblioteki SP-HAL zainstalowane na partycji dostawcy). Biblioteki VNDK-SP mogą być ładowane podwójnie.

Aby dołączyć bibliotekę do VNDK-SP, dodaj następujące elementy do Android.bp :

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

Biblioteki LL-NDK są instalowane w /system/lib[64] . Moduły dostawców mogą wykorzystywać biblioteki pośredniczące LL-NDK w celu uzyskania dostępu do wstępnie wybranych symboli bibliotek LL-NDK. Biblioteki LL-NDK muszą być kompatybilne wstecz i stabilne pod względem ABI, aby umożliwić starym wersjom modułów dostawców korzystanie z nowych wersji bibliotek LL-NDK. Ze względu na stabilną pod względem ABI charakterystykę LL-NDK, migawka VNDK nie musi zawierać bibliotek LL-NDK dla obrazów starych dostawców.

Informacje o migawkach VNDK

Android 8.1 zawierał biblioteki VNDK zbudowane z kodu źródłowego . Jednak w przypadku nowszych wersji systemu Android każda wersja VNDK musi zostać przechwycona jako migawka i udostępniona jako wersja wstępna, aby umożliwić połączenie z obrazem starszego dostawcy.

Począwszy od Androida 9, nowe wersje Androida będą zawierać co najmniej jedną migawkę katalogów VNDK-core i VNDK-SP dla starszych wersji w kodzie źródłowym Androida. W czasie kompilacji wymagane migawki zostaną zainstalowane w /system/lib[64]/vndk-${VER} i /system/lib[64]/vndk-sp-${VER} (katalogi, z których może korzystać dostawca partycja), gdzie ${VER} jest zmienną łańcuchową reprezentującą nazwę wersji migawki VNDK.

Ponieważ biblioteki migawek VNDK mogą się różnić dla każdej wersji VNDK, migawka VNDK zawiera także konfiguracje przestrzeni nazw konsolidatora, instalowane jako etc/ld.config.${VER}.txt , /etc/llndk.libraries.${VER}.txt i /etc/vndksp.libraries.${VER}.txt .

Przykład: aktualizacja obrazów systemu i dostawców

Nie jest wymagana migawka; kompilacja bez dodatkowych konfiguracji migawek VNDK.

Przykład: aktualizacja tylko obrazu systemu

Musi zawierać migawkę VNDK i pliki konfiguracyjne przestrzeni nazw konsolidatora dla obrazu dostawcy w obrazie systemu. Pliki konfiguracyjne przestrzeni nazw linkera są automatycznie konfigurowane do wyszukiwania bibliotek VNDK w /system/lib[64]/vndk-${VER} i /system/lib[64]/vndk-sp-${VER} .

Rysunek 1. Tylko aktualizacja systemu

Przykład: aktualizacja obrazu systemu, drobna zmiana obrazu dostawcy

Tworzenie obrazu dostawcy na podstawie migawki VNDK nie jest jeszcze obsługiwane, dlatego należy utworzyć obraz dostawcy oddzielnie z jego oryginalnym kodem źródłowym, a następnie zaktualizować obraz systemu zgodnie z opisem w poprzednim przykładzie.

Architektura migawek VNDK

Aby obraz systemu Android 9 był zgodny z obrazem dostawcy Androida 8.1, migawka VNDK zgodna z obrazem dostawcy Androida 8.1 musi zostać dostarczona z obrazem systemu Android 9, jak pokazano poniżej:

Rysunek 2. Architektura migawek VNDK

Projekt migawki VNDK obejmuje następujące metody:

  • Generowanie migawki dla bibliotek VNDK-core i VNDK-SP . Android 9 zawiera skrypt, za pomocą którego można wykonać migawkę bieżącej kompilacji VNDK. Ten skrypt łączy wszystkie biblioteki w /system/lib[64]/vndk-28 i /system/lib[64]/vndk-sp-28 które zostały zbudowane z bieżącego źródła jako migawka VNDK, gdzie 28 to wersja VNDK Android 9. Migawka zawiera także pliki konfiguracyjne przestrzeni nazw linkera /etc/ld.config.28.txt , /etc/llndk.libraries.28.txt i /etc/vndksp.libraries.28.txt . Wygenerowany snapshot będzie używany z nowszymi wersjami Androida (wyższymi niż Android 9).
  • Instalowanie gotowych bibliotek VNDK-core i VNDK-SP z migawki . W systemie Android 9 migawka VNDK zawiera zestaw gotowych bibliotek rdzenia VNDK i zestaw bibliotek VNDK-SP, a także pliki konfiguracyjne przestrzeni nazw konsolidatora. Jeśli podasz listę wersji migawek VNDK do zainstalowania, w czasie kompilacji obraz systemu zainstaluje biblioteki migawek VNDK w katalogach /system/lib[64]/vndk-${VER} i /system/lib[64]/vndk-sp-${VER} katalogi /system/lib[64]/vndk-sp-${VER} i pliki konfiguracyjne przestrzeni nazw konsolidatora dla tych migawek VNDK do katalogu /etc .

Wersja VNDK

Każde wydanie Androida ma tylko jedną migawkę VNDK, a wersja SDK jest używana jako wersja VNDK (co oznacza, że ​​wersja VNDK ma liczbę całkowitą, np. 27 dla Androida 8.1). Wersja VNDK zostanie naprawiona po wydaniu wersji na Androida. Wersja VNDK używana przez partycję dostawcy jest automatycznie zapisywana we właściwości ro.vndk.version , którą można odczytać w czasie wykonywania. Ta wersja jest następnie używana do identyfikowania wersji VNDK dostawcy dla niektórych bibliotek i identyfikowania wersji migawki VNDK na potrzeby konfiguracji przestrzeni nazw.

Budowa bibliotek VNDK

Komenda make vndk tworzy biblioteki, które mają vndk: { enabled: true, … } , łącznie z zależnościami i plikami konfiguracyjnymi przestrzeni nazw. Jeśli ustawiono BOARD_VNDK_VERSION := current , biblioteki te są budowane za pomocą polecenia make .

Ponieważ ta kompilacja nie instaluje bibliotek VNDK z migawki, zainstalowane biblioteki VNDK nie są stabilne pod kątem ABI. Jednak po wydaniu wersji na Androida poprawiany jest interfejs ABI bieżącej wersji VNDK. W tym momencie każde uszkodzenie ABI jest błędem kompilacji, więc poprawki do wersji Androida nie mogą zmieniać ABI dla bibliotek VNDK.