Projekt ogólnego obrazu jądra (GKI)

Na tej stronie opisujemy projekt ogólnego obrazu jądra (GKI) i wyjaśniamy, jak zwiększa on stabilność Androida i poprawia bezpieczeństwo.

Historia

Każde urządzenie z Androidem wymaga jądra produkcyjnego. Przed wprowadzeniem GKI jądra były niestandardowe i oparte na wspólnym jądrze Androida (ACK), a producenci układów SOC i OEM wprowadzali w nich zmiany specyficzne dla danego urządzenia.

W wyniku tej personalizacji nawet 50% kodu jądra może pochodzić z zewnętrznych źródeł, a nie z głównych wersji jądra Linux ani ACK. W związku z tym niestandardowy charakter jąder sprzed GKI powodował znaczną 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ń wymienione w biuletynie bezpieczeństwa Androida (ASB) muszą być przeniesione do każdego z jąder urządzenia. Jednak ze względu na fragmentację jądra rozpowszechnianie poprawek zabezpieczeń na urządzeniach z Androidem jest zbyt kosztowne.

Trudności z scalaniem aktualizacji LTS

Wersje długoterminowego wsparcia (LTS) zawierają poprawki zabezpieczeń i inne ważne poprawki błędów. Aktualizowanie wersji LTS okazało się najskuteczniejszym sposobem dostarczania poprawek bezpieczeństwa. W przypadku urządzeń Pixel odkryliśmy, że 90% problemów z bezpieczeństwem jądra zgłoszonych w ASB zostało już rozwiązanych na urządzeniach, które są na bieżąco aktualizowane.

Jednak ze względu na wszystkie niestandardowe modyfikacje w jądrach urządzeń trudno jest po prostu scalić poprawki LTS z jądrami urządzeń.

Blokowanie uaktualnień wersji platformy Android

Fragmentacja utrudnia dodawanie do urządzeń w terenie nowych funkcji Androida wymagających zmian w jądrze. Kod Android Framework musiał uwzględniać różne wersje jądra i nie mógł polegać na nowych funkcjach Androida zaimplementowanych w jądrze. Spowalniało to innowacje i zwiększało rozmiar oraz złożoność kodu.

Trudność w przesyłaniu zmian w jądrze z powrotem do głównej wersji Linuksa

Fragmentaryczny sposób wprowadzania poprawek do jąder produkcyjnych powodował opóźnienie nawet o 18 miesięcy od momentu, w którym wersja LTS była dostępna w źródle, do momentu, w którym była dostępna na urządzeniu. Tak duże opóźnienie między wydaniem jądra upstream a produktami utrudnia społeczności Androida wprowadzanie do jąder upstream potrzebnych funkcji i sterowników. Zanim użytkownik przesłał sugestie dotyczące ulepszeń, baza kodu uległa zmianie, co utrudniło pokazanie trafności poprawki.

Rozwiązanie problemu z fragmentacją: ogólny obraz jądra

Projekt ogólnego obrazu jądra (GKI) rozwiązuje problem fragmentacji jądra przez ujednolicenie jądra głównego i przeniesienie obsługi SoC i płyty głównej z jądra głównego do modułów dostawcy, które można wczytywać. GKI udostępnia też stabilny interfejs modułu jądra (KMI) dla modułów dostawcy, dzięki czemu moduły i jądro mogą być aktualizowane niezależnie. Oto niektóre cechy jądra GKI:

  • Jądro GKI jest tworzone na podstawie źródeł ACK.
  • Jądro GKI to pojedynczy plik binarny jądra oraz powiązane z nim moduły do załadowania dla każdej architektury i wersji LTS.
  • Jądro GKI jest testowane we wszystkich wersjach platformy Android, które są obsługiwane w przypadku powiązanego ACK. Wersja jądra GKI nie jest wycofywana.
  • Jądro GKI udostępnia sterownikom w ramach danego LTS stabilny interfejs KMI.
  • Jądro GKI nie zawiera kodu specyficznego dla SoC ani płyty.

Obraz architektury GKI znajdziesz w omówieniu jądra.

Obraz ogólny

Od Androida 12 urządzenia dostarczane z jądrem w wersji 5.10 lub nowszej muszą być dostarczane z jądrem GKI. Wersje podstawowego obrazu jądra (GKI) są regularnie aktualizowane o poprawki LTS i krytycznych błędów. Ponieważ stabilność binarna jest zachowana w przypadku interfejsu KMI, możesz zainstalować te obrazy rozruchowe bez wprowadzania zmian w obrazach dostawcy. Projekt GKI ma następujące cele:

  • Nie wprowadzaj znaczących regresji wydajności ani zużycia energii podczas zastępowania jądra produktu jądrem GKI.
  • Umożliwienie partnerom dostarczania poprawek zabezpieczeń jądra i poprawek błędów bez udziału dostawcy.
  • Obniżanie kosztów aktualizacji głównej wersji jądra na urządzeniach.
  • Utrzymuj jeden plik binarny jądra GKI na architekturę, aktualizując wersje jądra zgodnie z jasnym procesem uaktualniania.