Generowanie zrzutów dostawców

Android 11 obsługuje kompilację zrzutów VNDK artefakty i zrzuty ekranu dostawcy, których możesz użyć do utworzenia vendor.img niezależnie Wersja Androida w drzewie źródłowym. Umożliwia to korzystanie z mieszanych wersji obrazów, takich jak jako starszego dostawcy i nowszy obraz systemu.

W tych przypadkach mieszane wersje obrazów nie są obsługiwane.

  • Android.mk. Ponieważ Soong generuje podsumowanie dostawcy, moduły zdefiniowane w Moduły Android.mk nie są rejestrowane jako podsumowanie dostawcy (moduły SoC-zastrzeżone w Android.mk również mogą nie działać).

  • System sanitarny. Zrzuty dostawcy i VNDK nie obsługują narzędzia sanitizer jako środka do dezynfekcji musisz utworzyć osobno.

Informacje o migawkach dostawców

Migawka dostawcy to migawka należąca do OEM. To zestaw gotowych modułów C++, zainstalowane w systemie /vendor, ale utrzymywane w AOSP. Bez rejestrowania dostawcy podsumowanie poprzedniej wersji Androida, aktualizacja do nowej wersji może uszkodzić partycję dostawcy, ponieważ można usunąć moduły migawki dostawcy. lub zmienione bez zgodności z interfejsem API lub ABI.

Migawka dostawcy zawiera poniższe moduły w AOSP.

  • Biblioteki udostępnione, statyczne i nagłówki udostępnione w bibliotece vendor: true lub vendor_available: true
  • Biblioteki statyczne VNDK z elementem vendor_available: true
  • Pliki wykonywalne i pliki obiektów zawierające vendor: true lub vendor_available: true

Moduły w tych katalogach są uznawane za kod sprzętowy należący do SoC i są ignorowane.

  • device/
  • vendor/
  • hardware/ oprócz
    • hardware/interfaces
    • hardware/libhardware
    • hardware/libhardware_legacy

Kody sprzętowe należące do układu SOC mogą też znajdować się w innych katalogach. Od tego momentu zrzuty ekranu dostawcy nie obsługują takich konfiguracji.

Tworzenie zrzutów dostawców

Utwórz zrzut dostawcy za pomocą poniższych poleceń.

. build/envsetup.sh
lunch target
m dist vendor-snapshot

Te polecenia tworzą plik vendor-$(TARGET_DEVICE).zip w $DIST_DIR Ten przykład przedstawia plik ZIP ze zrzutem dostawcy:

vendor-$(TARGET_DEVICE).zip
├── arch-arm64-armv8-a
│   ├── binary         -> binary files, *.json files
│   ├── header         -> *.json files
│   ├── object         -> *.o files, *.json files
│   ├── shared         -> *.so files, *.json files
│   └── static         -> *.a files, *.json files
├── arch-arm-armv8-a   -> (arch-arm64-armv8-a)
├── configs            -> *.rc files, *.xml files
├── include            -> exported header files (*.h, *.hh, etc.)
└── NOTICE_FILES       -> license txt files
  • Pliki JSON zawierają flagi takie jak nazwa modułu, wyeksportowane katalogi Pliki: init_rc i pliki (vintf_fragments).
  • Katalog configs zawiera pliki .rc i .xml z flag init_rc i vintf_fragments.

Instalowanie zrzutów dostawców

Aby zainstalować zrzut dostawcy, przejdź do katalogu docelowego i użyj polecenia tych poleceń.

python3 development/vendor_snapshot/update.py --local $DIST_DIR --install-dir \
    vendor/vendor name/vendor_snapshot VER

To polecenie generuje /vendor/vendor name/vendor_snapshot/vVER/$(TARGET_ARCH)/Android.bp Poniższy przykład przedstawia strukturę katalogu zrzutu dostawcy:

vendor/vendor name/vendor_snapshot/
├── v30
│   ├── arm64
│   │   ├── arch-arm64-armv8-a
│   │   │   ├── binary         -> (prebuilt libs)
│   │   │   ├── object         -> (prebuilt libs)
│   │   │   ├── shared         -> (prebuilt libs)
│   │   │   └── static         -> (prebuilt libs)
│   │   ├── arch-arm-armv8-a   -> (same as above)
│   │   ├── configs            -> (config files)
│   │   ├── include            -> (exported header files)
│   │   ├── NOTICE_FILES       -> (license files)
│   │   └── Android.bp         -> (snapshot modules)
│   ├── arm                    -> (same as above)
│   ├── x86_64                 -> (same as above)
│   └── x86                    -> (same as above)
└── (other vendor versions)    -> (same as above)

Tworzenie obrazów dostawców

Korzystanie z kompilacji zrzutu VNDK artefakty i podsumowanie dostawcy, możesz utworzyć vendor.img niezależnie na drzewie źródłowym, co umożliwia tworzenie mieszanych wersji obrazów. Po zainstalowaniu zrzutu VNDK i zrzutu dostawcy ustaw BOARD_VNDK_VERSION do wersji dostawcy. Na przykład:

# BoardConfig.mk
BOARD_VNDK_VERSION := 29

Gdy BOARD_VNDK_VERSION ma wartość inną niż current, kompilacja system:

  • Włącza moduły zrzutów VNDK i moduły zrzutów od dostawcy BOARD_VNDK_VERSION Każdy moduł zrzutu zastępuje moduł źródłowy C++ o tej samej nazwie.
  • Ustawia wartość BOARD_VNDK_VERSION na ro.vndk.version.
  • Instaluje moduły zrzutu VNDK z BOARD_VNDK_VERSION w: system_ext.