Podczas opracowywania i wydawania nowych urządzeń dostawcy mogą definiować i deklarować docelową wersję FCM w manifeście urządzenia (DM). Podczas uaktualniania obrazu dostawcy dla starych urządzeń dostawcy mogą zdecydować się na wdrożenie nowych wersji warstwy HAL i zwiększenie docelowej wersji FCM.
Opracowywanie nowych urządzeń
Podczas definiowania urządzenia Docelowa wersja FCM dla nowych urządzeń:
- Pozostaw
DEVICE_MANIFEST_FILE
iPRODUCT_ENFORCE_VINTF_MANIFEST
niezdefiniowane. - Implementuj warstwy HAL dla docelowej wersji FCM.
- Napisz poprawny plik manifestu urządzenia.
- Zapisz docelową wersję FCM w pliku manifestu urządzenia.
- Ustaw
DEVICE_MANIFEST_FILE
. - Ustaw
PRODUCT_ENFORCE_VINTF_MANIFEST
natrue
.
Wydawanie nowych urządzeń
Po wydaniu nowego urządzenia jego początkowa docelowa wersja FCM musi zostać określona i zadeklarowana w manifeście urządzenia jako atrybut „ target-level
” w elemencie <manifest>
najwyższego poziomu.
Na przykład urządzenia uruchamiane z systemem Android 9 muszą mieć docelową wersję FCM równą 3 (aktualnie dostępna wyższa wersja). Aby to zadeklarować w manifeście urządzenia:
<manifest version="1.0" type="device" target-level="3"> <!-- ... --> </manifest>
Aktualizowanie obrazu dostawcy
Podczas uaktualniania obrazu dostawcy dla starego urządzenia dostawcy mogą zdecydować się na wdrożenie nowych wersji HAL i zwiększyć docelową wersję FCM.
Aktualizowanie HAL
Podczas uaktualniania obrazu dostawcy dostawcy mogą wdrażać nowe wersje warstwy HAL pod warunkiem, że nazwa warstwy HAL, nazwa interfejsu i nazwa wystąpienia są takie same. Na przykład:
- Urządzenia Google Pixel 2 i Pixel 2 XL wydane z Target FCM w wersji 2, które zaimplementowały wymaganą warstwę audio 2.0 HAL
android.hardware.audio@2.0::IDeviceFactory/default
. - W przypadku warstwy audio 4.0 HAL wydanej z systemem Android 9 urządzenia Google Pixel 2 i Pixel 2 XL mogą korzystać z pełnej wersji OTA w celu uaktualnienia do wersji 4.0 HAL, która implementuje
android.hardware.audio@4.0::IDeviceFactory/default
. - Mimo że
compatibility_matrix.2.xml
określa tylko dźwięk 2.0, wymagania dotyczące obrazu dostawcy z docelowym FCM w wersji 2 zostały poluzowane, ponieważ platforma Android 9 (FCM wersja 3) traktuje dźwięk 4.0 jako zamiennik audio 2.0 HAL pod względem funkcjonalności .
Podsumowując, biorąc pod uwagę, że compatibility_matrix.2.xml
wymaga audio 2.0, a compatibility_matrix.3.xml
wymaga audio 4.0, wymagania są następujące:
Wersja FCM (system) | Docelowa wersja FCM (dostawca) | Wymagania |
---|---|---|
2 (8.1) | 2 (8.1) | Dźwięk 2.0 |
3 (9) | 2 (8.1) | Dźwięk 2.0 lub 4.0 |
3 (9) | 3 (9) | Dźwięk 4.0 |
Aktualizacja docelowej wersji FCM
Podczas uaktualniania obrazu dostawcy dostawcy mogą również zwiększyć docelową wersję FCM, aby określić docelową wersję FCM, z którą uaktualniony obraz dostawcy może współpracować. Aby podbić docelową wersję FCM urządzenia, dostawcy muszą:
- Zaimplementuj wszystkie nowe wymagane wersje HAL dla docelowej wersji FCM.
- Zmodyfikuj wersje HAL w pliku manifestu urządzenia.
- Zmodyfikuj docelową wersję FCM w pliku manifestu urządzenia.
- Usuń przestarzałe wersje HAL.
Na przykład urządzenia Google Pixel i Pixel XL uruchomione z systemem Android 7.0, więc ich docelowa wersja FCM musi być co najmniej starsza. Jednak manifest urządzenia deklaruje docelową wersję FCM w wersji 2, ponieważ obraz dostawcy został zaktualizowany, aby był compatibility_matrix.2.xml
z compliance_matrix.2.xml :
<manifest version="1.0" type="device" target-level="2">
Jeśli dostawcy nie zaimplementują wszystkich wymaganych nowych wersji HAL lub nie usuną przestarzałych wersji HAL, nie można uaktualnić docelowej wersji FCM.
Na przykład urządzenia Google Pixel 2 i Pixel 2 XL mają Target FCM w wersji 2. Chociaż implementują niektóre warstwy HAL wymagane przez compatibility_matrix.3.xml
(takie jak audio 4.0, zdrowie 2.0 itp.), nie usuwają sprzętu android.hardware.radio.deprecated@1.0
. android.hardware.radio.deprecated@1.0
, który jest przestarzały w wersji 3 FCM (Android 9). Dlatego te urządzenia nie mogą zaktualizować docelowej wersji FCM do 3.
Narzucanie wymagań jądra podczas OTA
Aktualizowanie urządzeń z Androida 9 lub starszego
Na urządzeniach z Androidem 9 lub starszym upewnij się, że wybrane są następujące CL:
Te zmiany wprowadzają flagę kompilacji PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
i pozostawiają tę flagę nieustawioną dla urządzeń z systemem Android 9 lub starszym.
- Podczas aktualizacji do systemu Android 10 klienci OTA na urządzeniach z systemem Android 9 lub niższym nie sprawdzają poprawnie wymagań jądra w pakiecie OTA. Te zmiany są potrzebne, aby usunąć wymagania jądra z wygenerowanego pakietu OTA.
- Podczas aktualizacji do systemu Android 11 opcjonalne jest ustawienie flagi kompilacji
PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
, aby sprawdzić zgodność z VINTF podczas generowania pakietu aktualizacji.
Aby uzyskać więcej informacji na temat tej flagi kompilacji, zobacz Aktualizowanie urządzeń z systemu Android 10 .
Aktualizowanie urządzeń z Androida 10
Android 10 wprowadza nową flagę kompilacji PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
. W przypadku urządzeń z systemem Android 10 ta flaga jest automatycznie ustawiana na true
. Gdy flaga jest ustawiona na true
, skrypt wyodrębnia wersję jądra i konfiguracje jądra z zainstalowanego obrazu jądra.
- Podczas aktualizacji do systemu Android 10 pakiet aktualizacji OTA zawiera wersję i konfigurację jądra. Klienci OTA na urządzeniach z systemem Android 10 czytają te informacje, aby sprawdzić zgodność.
- Podczas aktualizacji do systemu Android 11 gatunkowanie pakietów OTA odczytuje wersję jądra i konfigurację w celu sprawdzenia zgodności.
Jeśli skryptowi nie uda się wyodrębnić tych informacji dla obrazu jądra, wykonaj jedną z następujących czynności:
- Edytuj skrypt, aby obsługiwał format jądra i współpracował z AOSP.
- Ustaw
BOARD_KERNEL_VERSION
na wersję jądra iBOARD_KERNEL_CONFIG_FILE
na ścieżkę do zbudowanego pliku konfiguracyjnego jądra.config
. Obie zmienne muszą zostać zaktualizowane podczas aktualizacji obrazu jądra. - Alternatywnie ustaw
PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS
nafalse
, aby pominąć sprawdzanie wymagań jądra. Nie jest to zalecane, ponieważ wszelkie niezgodności są ukryte i są wykrywane tylko podczas uruchamiania testów VTS po aktualizacji.
Możesz wyświetlić kod źródłowy skryptu wyodrębniania informacji o jądrze extract_kernel.py
.