Schemat obsługi wersji GKI

Na tej stronie opisano schemat obsługi wersji dla ogólnych obrazów jądra (GKI). O Ogólny obraz jądra (GKI) ma unikalny identyfikator nazywany wydaniem jądra. Wersja jądra składa się wersji interfejsu modułu jądra (KMI) i podpoziomu. Jądro zależy od publikowanego obrazu, natomiast wersja KMI reprezentuje interfejs, na którym powstaje wersja. Obsługiwana wersja KMI kilka wersji jądra systemu operacyjnego. Wersja jądra jest powiązana tylko z jedną wersją KMI. W nieprawdopodobne zdarzenie konieczności zmiany interfejsu modułu jądra, KMI jest powtarzana w celu odzwierciedlenia zmiany w wersji KMI.

Podsumowanie warunków

W tabeli poniżej znajdziesz podsumowanie ważnych terminów używanych na tej stronie oraz .

Nazwa Symbol Przykład Opis
Wydanie jądra systemu w.x.y-zzz-k-sufiks 5.4.42-android12-0-foo Unikalny identyfikator wersji GKI. To jest wartość zwrócone przez uname.
Wersja KMI szer.x-zzz-k 5.4-android12-0 Opisuje interfejs modułu jądra (KMI) między GKI a dynamicznie ładowanych modułów jądra (DLKM).
Podpoziom Y 42 Opisuje kolejność wydań jądra w tę samą wersję KMI.

W poniższej tabeli wymienione są także inne powiązane terminy.

Nazwa Symbol Przykład Opis
szeroka x y szeroka x y 5.4.42

Szczegółowe informacje można znaleźć w sekcji Linux Tworzenie plików jądra (wyszukaj „KERNELRelease”).

w.x.y jest używane bezpośrednio w tym dokumencie. To także powszechnie nazywany trzyczęściowym numerem wersji. Użyte hasło w VINTF, czyli wersji jądra, może powodować niejasności z innymi terminami, zwłaszcza W.

W bibliotece libkver ta zmienna jest nazywana kernel_version_tuple.

Tej krotki nie można zmniejszać przez żadne aktualizacje, w tym aktualizacje OTA ani mainline.

Gałąź jądra zzz-s.x Android12-5.4 To hasło jest używane w języku Typowe typy gałęzi jądra.
Wersja w 5 To hasło nie jest używane w tym dokumencie. Jest to tzw. zmienna version w bibliotece libkver.
Poziom poprawki x 4 To hasło nie jest używane w tym dokumencie. Jest to tzw. zmienna patch_level w bibliotece libkver.
Wersja Androida Chrr... Android12

To jest numer wersji Androida (deser), z którym jest powiązane jądro .

Podczas porównywania pola AndroidRelease część liczbowa to wyodrębnione z ciągu do porównania.

Numeru wersji Androida nie można zmniejszać przez żadne aktualizacje, w tym OTA lub mainline.

Generowanie KMI K 0

Dodanie tego numeru w celu rozwiązania problemu z mało prawdopodobnymi zdarzeń. Jeśli poprawka błędu zabezpieczeń wymaga wprowadzenia zmian w KMI w tym samym Wersja na Androida, generacja KMI została zwiększona.

Numer generacji KMI zaczyna się od 0.

Projekt obsługi wersji

Wydanie jądra systemu

Definicja

W przypadku urządzeń z GKI wersja jądra jest zdefiniowana w ten sposób:

KernelRelease :=
Version.PatchLevel.SubLevel-AndroidRelease-KmiGeneration-suffix
w      .x         .y       -zzz           -k            -something

Więcej informacji znajdziesz w artykule Określanie wersji jądra na podstawie urządzenia.

Poniżej znajduje się przykład wersji jądra.

5.4.42-android12-0-00544-ged21d463f856

Opis

Wersja jądra to unikalny identyfikator wersji GKI. Jeśli 2 pliki binarne GKI mają to samo jądro, muszą być identyczne pod względem bajtów.

Wersja jądra składa się z wersji KMI, poziomu podrzędnego i sufiksu. Dla: dla celów tego dokumentu, przyrostek po wygenerowaniu KMI jest ignorowany.

Wersja KMI

Definicja

Wersja KMI jest zdefiniowana w ten sposób:

KmiVersion :=
Version.PatchLevel-AndroidRelease-KmiGeneration
w      .x         -zzz           -k

Pamiętaj, że podpoziom y nie jest częścią wersji KMI. Na przykład: w wersji jądra wersja KMI to:

5.4-android12-0

Opis

Wersja KMI opisuje interfejs modułu jądra (KMI) między GKI a dynamicznie ładowanych modułów jądra (DLKM).

Jeśli 2 wersje jądra mają tę samą wersję KMI, implementują to samo jądro interfejsu modułu. Jednostki DLKM, które są z nimi zgodne, również są zgodne między sobą.

Wersji KMI nie można zmniejszać przez aktualizacje OTA.

Podpoziom

Podpoziom (y) opisuje kolejność wersji jądra w tę samą wersję KMI.

Dla dwóch wersji jądra, które mają tę samą wersję KMI, ale są podrzędne na poziomie Y1 oraz Y2 odpowiednio:

  • Jeśli wartość Y1 jest mniejsza lub równa Y2, urządzenie z wartością Y1 może otrzymać zaktualizować do Y2.
  • Jeśli wartość Y1 jest większa niż Y2, na urządzeniu z wartością Y1 nie można zaktualizować wartości Y2.

Oznacza to, że jeśli wersja KMI się nie zmieni, nie można zmniejszyć poziomu podrzędnego przez dowolną aktualizację OTA.

Określanie wersji jądra urządzenia

Aby znaleźć pełną wersję jądra, wykonaj polecenie uname -r lub uname(2). z następującym fragmentem kodu:

std::string get_kernel_release() {
  struct utsname buf;
  return uname(&buf) == 0 ? buf.release : "";
}

Przykładowe dane wyjściowe:

5.4.42-android12-0-00544-ged21d463f856

Na potrzeby tego dokumentu wszystko, co następuje po wygenerowaniu KMI, jest ignorowane podczas wyodrębniania informacji o jądrze. Bardziej oficjalnie dane wyjściowe funkcji uname -r to analizowana za pomocą następującego wyrażenia regularnego (zakładając, że zzz zawsze zaczyna się od „android”):

^(?P<w>\d+)[.](?P<x>\d+)[.](?P<y>\d+)-(?P<z>android\d+)-(?P<k>\d+).*$

Ignorowane informacje mogą zawierać następujące informacje: Numer kompilacji ci.android.com, liczba poprawki na bazowym jądrze oraz hasze SHA zatwierdzenia git.

libkver

Biblioteka libkver udostępnia interfejs w języku C++ do analizowania wersji jądra lub Ciąg znaków wersji KMI. Listę interfejsów API udostępnianych przez libkver znajdziesz w materiałach na temat packages/modules/Gki/libkver/include/kver

Kontrole VINTF

W przypadku Androida 11 i starszych wersji KMI część wersji na Androida to ręcznie określone przez producentów w pliku manifestu. Więcej informacji: zobacz reguły dopasowania jądra VINTF.

Z Androida S można wyodrębnić część wersji KMI dla Androida z jądra i wstrzyknięty do pliku manifestu urządzenia.

Wymagania dotyczące konfiguracji jądra zazwyczaj się nie zmieniają, muszą zakodować element k w macierzy zgodności. Jednak w mało prawdopodobnych w którym wymaga zmiany konfiguracji jądra, upewnij się, następujące:

  • Odpowiednie wymaganie z tablicy zgodności zostało usunięte.
  • Dodaliśmy więcej testów VTS, aby sprawdzić nowe wymagania warunkowe w generowaniu KMI.

Wersja obrazu rozruchowego w metadanych OTA

Nawet jeśli obraz rozruchowy jest aktualizowany przez OTA, musi być zapakowane w formacie ładunku OTA (payload.bin). Ładunek OTA koduje version dla każdej partycji. Gdy update_engine obsługuje ładunek OTA, porównuje to pole, aby sprawdzić, czy partycja nie została obniżona.

Aby uniknąć nieporozumień, pole version partycji rozruchowej w OTA nazywa się boot image version.

Dysk RAM jest zawsze tworzony od zera, dlatego tag Ramdisk timestamp wystarcza do opisania całego obrazu rozruchowego. Nie ma potrzeby zakodować wersję jądra w wersji obrazu rozruchowego, chyba że łączysz stare w przyszłości obraz rozruchowy do nowego pliku binarnego jądra.

Przed aktualizacją OTA klient OTA sprawdza wersję obrazu rozruchowego w taki sam sposób jak każda inna partycja.