Typowe jądra Androida

Powszechne jądra AOSP (nazywane też wspólnymi jądrami Androida lub ACK) są przesyłane po jądrze kernel.org i zawierają poprawki przydatne dla społeczności Androida, które nie zostały połączone z jądrami głównymi lub LTS. Poprawki mogą obejmować:

  • Pakiety i seriale dodatkowych funkcji wymaganych do działania funkcji Androida
  • Funkcje są gotowe na urządzenia z Androidem, ale w trakcie opracowywania
  • Funkcje dotyczące dostawców/OEM, które są przydatne dla innych partnerów ekosystemu

android-mainline to główna gałąź programistyczna funkcji Androida. Główny wiersz systemu Linux jest scalany z elementem android-mainline za każdym razem, gdy Linus Torvalds opublikuje kandydującą wersję lub wydanie. Przed 2019 rokiem popularne jądra Androida tworzyno przez sklonowanie ostatnio zadeklarowanego jądra LTS i dodanie poprawek związanych z Androidem. Ten proces zmienił się w 2019 r. i rozgałęzia nowe wspólne jądro Androida z android-mainline. Ten nowy model pozwala uniknąć dużego wysiłku związanego z przekierowywaniem portów i testowaniem poprawek Androida przez stopniowe uzyskiwanie tego samego wyniku. android-mainline poddawane są znacznym ciągłym testom, a ten model zapewnia wysokiej jakości jądro od dnia publikacji.

Po zadeklarowaniu nowego kanału LTS na poziomie nadrzędnym odpowiednie wspólne jądro zostanie odgałęzione z android-mainline. Dzięki temu partnerzy mogą rozpocząć projekt przed zadeklarowaniem wersji LTS przez scalenie z android-mainline. Po utworzeniu nowej wspólnej gałęzi jądra partnerzy mogą bezproblemowo zmienić źródło scalania na nową gałąź.

Inne popularne gałęzie jądra są regularnie scalane ze swojego jednego jądra LTS. Scalanie przeprowadza się zwykle natychmiast po opublikowaniu wersji LTS. Na przykład gdy opublikowano system Linux 6.1.75, został on scalony ze wspólnym jądrem systemu 6.1 (android14-6.1). Zdecydowanie zachęcamy partnerów do zaktualizowania jądra w celu zapewnienia aktualności dotyczących kanału LTS i poprawek błędów typowych dla Androida.

Gałąź jądra ACK KMI

Jądro GKI ma stabilny interfejs modułu jądra. Wskaźnik KMI jest jednoznacznie identyfikowany na podstawie wersji jądra i wersji platformy Androida, dlatego gałęzie nazywają się ANDROID_RELEASE-KERNEL_VERSION. Na przykład jądro GKI 6.1 w przypadku Androida 14 nosi nazwę android14-6.1. W Androidzie 15 (eksperymentalny AOSP) wprowadzono jądro GKI android15-6.6.

Dodawanie i uruchamianie jąder

Przed Androidem 15 (eksperymentalnym AOSP) do uruchomienia urządzenia można było użyć dowolnego z 3 najnowszych jąder. Począwszy od Androida 15 (AOSP Experiment) można używać 2 najnowszych wersji jądra przy uruchamianiu urządzeń. jądra systemu operacyjnego dla Androida 15 (eksperymentalna wersja AOSP) to android15-6.6 i android14-6.1.

Podczas aktualizowania wersji platformy uaktualnienia jądra nie są wymagane, dlatego do uruchamiania urządzeń nadal można używać jąder, które nie mają najnowszych funkcji wersji platformy. Z tego powodu jądra zaprojektowane pod kątem Androida 14 (np. android14-6.1) mogą być używane na urządzeniach nawet po uaktualnieniu platformy do Androida 15 (eksperyment AOSP).

Wersja platformy Androida Uruchamianie jąder Jądro funkcji
Android 15 (AOSP Experiment) (2024) android15-6.6
android14-6.1
android15-6.6
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.101
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.101
android12-5.41
android11-5.41
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.41
android-4.19-stable
android12-5.10
android12-5.4
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

1 Jeśli powiązany pakiet BSP został zaktualizowany na potrzeby wersji platformy, mogą obowiązywać dodatkowe ograniczenia. Ogólnie rzecz biorąc, numer wersji Androida jądra musi być wyższy lub równy docelowej wersji FCM. Szczegółowe informacje znajdziesz w artykule Vendor Interface Object – dopasowywanie gałęzi jądra.

Wspólna hierarchia jądra

Oddział z Android-mainline

Najwyższa hierarchia wspólnego jądra jest przedstawiona na rys. 1.

Tworzenie typowych jąder z jądra Androida-mainline

Rysunek 1. Tworzenie typowych jąder z jądra Androida-mainline

Zwróć uwagę, że w 2022 roku od android-mainline zostało odgałęzione nowe popularne jądro Androida android14-6.1. W 2023 r., gdy zadeklarowano następny kanał LTS, android15-6.6 została odgałęziona od android-mainline.

Jak pokazano na Rys. 1, każda wersja jądra może być podstawą dla dwóch jąder GKI. Na przykład 2 jądro w wersji 5.15 to android13-5.15 i android14-5.15. Oba są jądrami funkcji dla odpowiednich wersji platformy. Tak samo było w przypadku wersji 5.10. Rozwiązanie android12-5.10 zostało utworzone po zadeklarowaniu kanału LTS, a odgałęzienie android13-5.10 nastąpiło od android12-5.10 w miarę rozwoju funkcji jądra wiosną 2021 r., aby umożliwić rozwijanie funkcji dla Androida 13. Począwszy od Androida 15 (AOSP w wersji eksperymentalnej) (2024) dla każdej wersji jądra będzie można używać tylko 1 nowego jądra GKI (nie ma jądra android15-6.1).

Cykl życia gałęzi ACK KMI

Cykl życia gałęzi KMI ACK przedstawiono poniżej na rys. 2.

6.6 Cykl życia gałęzi KMI ACK

Rysunek 2. 6.6 Cykl życia gałęzi KMI ACK

Aby ułatwić zrozumienie procesu rozwoju i cyklu życia gałęzi, na ilustracji 2. skupiamy się na gałęziach ACK KMI w wersji 6.6.

Każda gałąź ACK KMI przechodzi przez 3 fazy oznaczone na rys. 2 różnymi kolorami. Jak widać, kanał LTS jest regularnie scalany niezależnie od etapu.

Faza programowania

Po utworzeniu gałąź ACK KMI przechodzi w fazę rozwoju (na rys. 2 oznaczoną jako deweloperska) i jest otwarta na dodawanie funkcji w następnej wersji platformy Androida. Na rys. 2 obiekt android15-6.6 został utworzony, gdy wersja 6.6 została zadeklarowana jako nowe jądro LTS nadrzędne.

Faza stabilizacji

Gdy gałąź ACK KMI zostanie zadeklarowana jako funkcja zakończona, przechodzi w fazę stabilizacji (oznaczoną na rys. 2 jako stabilną). Funkcje partnerów i poprawki błędów są nadal akceptowane, ale śledzenie KMI jest włączone, aby wykrywać wszystkie zmiany, które wpływają na interfejs. Na tym etapie są akceptowane zmiany KMI, a definicja KMI aktualizowana według wstępnie zdefiniowanego cyklu (zwykle co 2 tygodnie). Aby uzyskać szczegółowe informacje o monitorowaniu KMI, zapoznaj się z omówieniem GKI.

Faza zablokowana KMI

Przed przekazaniem nowej wersji platformy do AOSP gałąź ACK KMI jest zablokowana i pozostaje zablokowana przez cały okres istnienia gałęzi. Oznacza to, że nie są akceptowane żadne zmiany powodujące niezgodność KMI, chyba że wykryjemy poważny problem związany z bezpieczeństwem, którego nie da się zniwelować bez wpływu na stabilną wskaźnik KMI. Aby uniknąć awarii KMI, niektóre poprawki scalone z kanału LTS mogą zostać zmodyfikowane lub usunięte, jeśli poprawka nie jest wymagana na urządzeniach z Androidem.

Gdy gałąź ACK KMI jest zablokowana, poprawki błędów i funkcje partnerów są akceptowane, o ile obecne wspólne jądro KMI nie jest uszkodzone. KMI można rozszerzyć o nowe wyeksportowane symbole, o ile nie wpłynie to na interfejsy stanowiące bieżącą wskaźnik KMI. Po dodaniu do KMI nowe interfejsy stają się od razu stabilne i nie mają możliwości uszkodzenia w przypadku przyszłych zmian.

Na przykład zmiana polegająca na dodaniu pola do struktury używanej przez typowe jądro interfejsu KMI jest niedozwolona, ponieważ zmienia definicję interfejsu:

struct foo {
  int original_field1;
  int original_field2;
  int new_field;  // Not allowed
};

int do_foo(struct foo &myarg)
{
  do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);

Możesz jednak dodać nową funkcję:

struct foo2 {
  struct foo orig_foo;
  int new_field;
};

int do_foo2(struct foo2 &myarg)
{
  do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);

Przez cały okres istnienia jądra GKI zgodność wsteczna z przestrzenią użytkownika jest zachowywana, dzięki czemu jądro może być bezpiecznie używane na platformie Androida, na której uruchomiono urządzenie. Ciągłe testy z poprzednimi wersjami pozwalają zachować zgodność. Zatem na ilustracji 2 jądra android15-6.6 można wykorzystać na urządzeniach z Androidem 15 (eksperymentalnym AOSP) i nowszych urządzeniach. Ponieważ wersja na platformie Android jest również zgodna z poprzednimi wersjami, jądro android14-6.1 można wykorzystać w przypadku urządzeń z Androidem 15 (eksperymentalny AOSP) zarówno do wdrożenia, jak i aktualizacji.

Numer generowania KMI

Jeśli podczas fazy stabilizacji wystąpi scalanie kanału LTS, wystąpi problem z zabezpieczeniami lub inne zdarzenie, które wymaga zaakceptowania poprawki KMI, numer generowania KMI zarejestrowany w build.config.common zostanie zwiększony. Bieżącą generację KMI można znaleźć za pomocą polecenia uname:

$ uname -r
6.6.30-android15-6-g86d10b30f51f

Numer po wydaniu platformy to numer KMI (w tym przypadku 6).

Jeśli generacja KMI ulegnie zmianie, jądro nie będzie zgodne z modułami dostawcy zgodnymi z poprzednią generacją KMI. Moduły należy więc skompilować i zaktualizować synchronicznie z jądrem. Po wstrzymaniu KMI zmiany w generowaniu KMI będą raczej rzadkie.

Zgodność jądra systemu

Wymagania dotyczące zgodności między jądrami z tej samej rodziny LTS zmieniają się wraz z wprowadzeniem nowych jąder GKI.

Jądro GKI

Jądro GKI zachowują zgodność wsteczną ze wszystkimi wersjami platformy Androida, które obsługiwały tę wersję jądra. Dodatkowo wersje platformy Androida są zgodne wstecznie z jądrami GKI z poprzednich wersji. Możesz więc bezpiecznie używać jądra android14-6.1 opracowanego na Androida 14 (2023) na urządzeniach z Androidem 15 (AOSP Experiment) (2024). Zgodność jest weryfikowana przez ciągłe testy VTS i CTS jąder GKI ze wszystkimi obsługiwanymi wersjami.

KMI jest stabilne, więc jądro można zaktualizować bez konieczności ponownego skompilowania modułów jądra w obrazie dostawcy.

Zgodność KMI między różnymi jądrami GKI nie jest zachowywana. Na przykład jądra android14-6.1 nie można zastąpić jądrem android15-6.6 bez odbudowy wszystkich modułów.

Jądra GKI są obsługiwane tylko w ich początkowych i kolejnych wersjach. Nie są one obsługiwane w przypadku starszych wersji. Z tego powodu jądro android15-6.6 nie jest obsługiwane w przypadku deweloperów z Androidem 14 (2023).

Macierz zgodności

Ta tabela przedstawia obsługiwane i przetestowane wersje jądra w poszczególnych wersjach platformy Androida.

Wersja platformy Androida Jądra obsługiwane na potrzeby uaktualnienia Jądro obsługiwane przy uruchamianiu
Android 15 (AOSP Experiment) (2024) android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android15-6.6
android14-6.1
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

Bezterminowa pomoc i poprawki zabezpieczeń

Typowe jądra Androida będą obsługiwane, dopóki powiązane jądro LTS lub wersja platformy Androida nie przestaną być obsługiwane. Jądro jest obsługiwane, ale nadal otrzymuje scalone kanały LTS ze strumienia źródłowego i poprawki błędów dotyczące kodu Androida. Te poprawki obejmują wszystkie poprawki zabezpieczeń jądra wymienione w comiesięcznych biuletynach dotyczących bezpieczeństwa Androida, które dotyczą popularnych jąder Androida.

Partnerzy mogą być pewni, że korzystając z jądra GKI, otrzymują wszystkie możliwe poprawki zabezpieczeń.

Typowe testowanie jądra systemu

Typowe jądra są testowane nie tylko przez testy wykonywane przez dostawców, ale też w kilku systemach CI.

Test funkcjonalny jądra systemu Linux

Testy funkcjonalne jądra systemu Linux (LKFT) inicjują różne zestawy testów, w tym kselftest, LTP, VTS i CTS na zbiorze fizycznych urządzeń z arm32 i arm64. Najnowsze wyniki testów można znaleźć tutaj.

Testowanie KernelCI

Testy kompilacji i uruchamiania KernelCI są inicjowane za każdym razem, gdy do wspólnej gałęzi jądra zostanie przypisana nowa poprawka. Testowanych i uruchamianych jest kilkaset konfiguracji kompilacji na różnych płytach. Najnowsze wyniki dotyczące jąder Androida znajdziesz tutaj.

Testowanie przed przesłaniem i po przesłaniu na Androida

Testy przed przesłaniem służą do zapobiegania wprowadzaniu błędów w typowych jądrach Androida. Podsumowanie wyników testu można znaleźć na karcie „Weryfikacja” dotyczącej zmiany kodu w popularnym jądrze Androida.

Testy postsubmit Androida są wykonywane w nowych, opublikowanych kompilacjach w typowych gałęziach jądra Androida, gdy nowe poprawki są przydzielane do wspólnej gałęzi jądra Androida w ci.android.com. Jeśli wpiszesz aosp_kernel jako częściową nazwę gałęzi w ci.android.com, wyświetli się lista gałęzi jądra z dostępnymi wynikami. Na przykład wyniki dla zapytania android-mainline znajdziesz tutaj. Gdy klikniesz konkretną kompilację, na karcie Test Results zobaczysz stan testu.

W przypadku gałęzi jądra Androida testy zdefiniowane w ramach mapowania testowego z grupą testową kernel-presubmit w drzewie źródła platformy Androida zostaną uruchomione jako wstępne przesłanie. Na przykład poniższa konfiguracja w instrukcji test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING spowoduje włączenie vts_kernel_proc_file_api_test jako testu wstępnego podczas odprawiania kodu typowego jądra Androida.

{
  "kernel-presubmit": [
    {
      "name": "vts_kernel_proc_file_api_test"
    }
  ]
}

Testuj przez 0 dni

0-dniowe testy polegają na przeprowadzeniu testów punktowych po wprowadzeniu poprawek we wszystkich popularnych gałęziach jądra Androida po zatwierdzeniu nowych poprawek. Przeprowadzane są różne testy rozruchowe, funkcjonalne i wydajności. Dołącz do publicznej grupy cros-kernel-buildreports

Zestaw testów

Wspólny jądro Androida Wersje platformy Androida Pakiety testowe
Główny 15 14 13 12 11 10 LKFT, jądra CI Przed przesłaniem Przesłanie posta 0 dni
android-mainline
android5-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable

Współtwórz popularne jądra Androida

Funkcje należy programować w głównym systemie Linux, a nie w popularnych jądrach Androida. Zdecydowanie zalecamy opracowanie nadrzędne. Gdy już zostanie ono zaakceptowane, można je w razie potrzeby łatwo przenieść do konkretnej gałęzi ACK. Zespół jądra Androida chętnie wspiera działania up-streamingowe z korzyścią dla ekosystemu Androida.

Prześlij poprawki do Gerrit i przestrzegaj tych wytycznych dotyczących przesyłania treści.