Projekt ogólnego obrazu jądra (GKI).

Jądro produktu , zwane także jądrem urządzenia lub jądrem OEM , to jądro dostarczane na Twoje urządzenie. Przed GKI jądro produktu pochodziło z serii wcześniejszych zmian w jądrze. Rysunek 1 pokazuje, jak dodatki do jądra dają jądro produktu (jądro OEM/urządzenia):

Konstrukcja jądra produktu sprzed wersji GKI

Rysunek 1. Konstrukcja jądra produktu sprzed wersji GKI.

  1. Jądro Linux Long Term Supported (LTS) z kernel.org zostało zmodyfikowane za pomocą poprawek specyficznych dla Androida, w wyniku czego powstało wspólne jądro systemu Android (ACK) .
  2. ACK został zmodyfikowany przez dostawców, którzy dodali obsługę ich System-on-a-Chip (SoC). Dostawcy mogą również dodać optymalizacje wydajności lub mocy. Powstałe jądro nazywane jest jądrem dostawcy .
  3. Wreszcie, jądro dostawcy zostało dalej zmodyfikowane przez producentów OEM, dodając dodatkowe sterowniki urządzeń i dostosowania, które uznali za konieczne. Powstałe jądro nazywane jest jądrem produktu .

Wszystkie te modyfikacje mogą spowodować, że aż 50% kodu jądra będzie kodem spoza drzewa, a nie z jąder Linuksa lub pakietów ACK. Przed GKI prawie każde urządzenie miało niestandardowe jądro, które skutkowało fragmentacją jądra.

Koszty fragmentacji

Fragmentacja jądra ma kilka negatywnych skutków dla społeczności Androida.

Aktualizacje zabezpieczeń są pracochłonne

Poprawki zabezpieczeń cytowane w Biuletynie zabezpieczeń systemu Android (ASB) muszą zostać przeniesione do każdego jądra urządzenia. Jednak ze względu na fragmentację jądra rozpowszechnianie poprawek bezpieczeństwa na urządzeniach z Androidem w terenie jest zbyt drogie.

Trudno jest połączyć długoterminowo obsługiwane aktualizacje

Wersje z obsługą długoterminową (LTS) zawierają poprawki zabezpieczeń i inne krytyczne poprawki błędów. Bycie na bieżąco z wersjami LTS okazało się najskuteczniejszym sposobem zapewniania poprawek bezpieczeństwa. Na urządzeniach Pixel odkryto, że 90% problemów z bezpieczeństwem jądra zgłoszonych w ASB zostało już naprawionych w przypadku urządzeń, które są aktualne.

Jednak przy wszystkich niestandardowych modyfikacjach w jądrach urządzeń trudno jest po prostu scalić poprawki LTS z jądrami urządzeń.

Blokuje aktualizacje wersji platformy Android

Fragmentacja utrudnia nowe funkcje Androida wymagające dodania zmian w jądrze do urządzeń w terenie. Kod Android Framework musi zakładać, że obsługiwanych jest aż pięć wersji jądra i że nie wprowadzono żadnych zmian w jądrze dla nowej wersji platformy (Android 10 obsługuje jądra 3.18, 4.4, 4.9, 4.14 i 4.19, które w niektórych przypadkach nie zostały wzbogacony o nowe funkcje od wersji Androida 8 w 2017 r.).

Trudno jest wprowadzić zmiany w jądrze z powrotem do wcześniejszego systemu Linux

Po wprowadzeniu wszystkich zmian w jądrze większość flagowych urządzeń jest dostarczana z wersją jądra mającą już co najmniej 18 miesięcy. Na przykład jądro 4.14 zostało wydane przez kernel.org w listopadzie 2017 r., a pierwsze telefony z Androidem korzystające z jądra 4.14 zostały dostarczone wiosną 2019 r.

To duże opóźnienie między wydaniem jądra nadrzędnego a produktami utrudnia społeczności Androida dostarczanie potrzebnych funkcji i sterowników do jądra nadrzędnego.

Naprawianie fragmentacji: ogólny obraz jądra

Projekt Generic Kernel Image (GKI) rozwiązuje problem fragmentacji jądra poprzez ujednolicenie jądra rdzenia i przeniesienie obsługi SoC i płytki z jądra rdzenia do ładowalnych modułów dostawcy. GKI udostępnia także stabilny interfejs modułu jądra (KMI) dla modułów dostawców, dzięki czemu moduły i jądro mogą być aktualizowane niezależnie. Niektóre cechy jądra GKI to:

  • Jądro GKI jest zbudowane ze źródeł ACK.
  • Jądro GKI to plik binarny z jednym jądrem i powiązanymi z nim ładowalnymi modułami dla każdej architektury, dla każdej wersji LTS (obecnie tylko arm64 dla android11-5.4 i android12-5.4 ).
  • Jądro GKI jest testowane ze wszystkimi wersjami platformy Android, które są obsługiwane dla powiązanego potwierdzenia ACK. Nie ma możliwości wycofania funkcji przez cały okres istnienia wersji jądra GKI.
  • Jądro GKI udostępnia stabilny KMI sterownikom w ramach danego LTS.
  • Jądro GKI nie zawiera kodu specyficznego dla SoC ani specyficznego dla płyty.

Aby zapoznać się z obrazem architektury GKI, zobacz przegląd jądra .

GKI to złożona zmiana, która została wdrożona w kilku etapach, począwszy od jądra v5.4 w wersji platformy Android 11.

Obecnie istnieją dwa etapy GKI:

  • GKI 1.0 zostało wprowadzone w systemie Android 11 dla urządzeń z jądrem 5.4. GKI 1.0 dotyczy wszystkich urządzeń dostarczanych z jądrem 5.4, nawet tych uruchomionych z systemem Android 12 lub Android 13.
  • GKI 2.0 zostało wprowadzone w systemie Android 12 dla urządzeń z jądrem 5.10 i stanowi nowy standard dla wszystkich urządzeń dostarczanych z jądrem 5.10 lub nowszym.

GKI 1.0

W GKI 1.0 urządzenia uruchamiane z jądrem w wersji 5.4 muszą przejść testy GKI (Android 11 i nowsze wersje platformy). Cele GKI 1.0 obejmują:

  • Unikaj regresji w pakiecie Vendor Test Suite (VTS) lub Compatibility Test Suite (CTS) podczas wymiany jądra produktu na jądro GKI.
  • Zmniejsz obciążenie partnerów koniecznością aktualizowania jądra za pomocą wspólnych jąder AOSP.
  • Uwzględnij podstawowe zmiany Androida w jądrach na potrzeby aktualizacji i uruchamiania urządzeń z nowymi wersjami Androida.
  • Nie niszcz przestrzeni użytkownika Androida.
  • Oddziel komponenty specyficzne dla sprzętu od jądra podstawowego jako ładowalne moduły.

Dokumentację GKI 1.0 można znaleźć w sekcji GKI 1.0 .

GKI 2.0

W GKI 2.0 urządzenia uruchamiane z jądrem w wersji 5.10 lub nowszej muszą być dostarczane z jądrem GKI (począwszy od Androida 12). Podpisane obrazy rozruchowe są dostępne i regularnie aktualizowane o LTS i krytyczne poprawki błędów. Ponieważ w przypadku KMI zachowana jest stabilność binarna, można zainstalować te obrazy rozruchowe bez wprowadzania zmian w obrazach dostawców. Cele GKI 2.0 obejmują:

  • Nie wprowadzaj znaczących spadków wydajności lub mocy podczas wymiany jądra produktu na jądro GKI.
  • Umożliwiaj partnerom dostarczanie poprawek zabezpieczeń jądra i poprawek błędów bez udziału dostawcy.
  • Zmniejsz koszty aktualizacji głównej wersji jądra dla urządzeń (na przykład z wersji 5.10 do jądra LTS 2021).
  • Utrzymuj pojedynczy plik binarny jądra GKI na architekturę, aktualizując wersje jądra za pomocą przejrzystego procesu aktualizacji.

GKI 2.0 reprezentuje najnowszy stan jąder Androida. Dokumentacja jądra poza podsekcjami GKI 1.0 i Poprzednie jądra (<=4.19) odzwierciedla architekturę GKI 2.0.