Projekt ogólnego obrazu jądra (GKI)

Na tej stronie opisujemy projekt Generic Kernel Image (GKI) oraz wyjaśniamy, jak zwiększa on stabilność i bezpieczeństwo Androida.

Historia

Każde urządzenie z Androidem wymaga produkcyjnego jądra. Przed wprowadzeniem GKI jądra były niestandardowe i oparte na wspólnym jądrze Androida (ACK), z modyfikacjami wprowadzonymi przez dostawców systemów na chipie (SoC) i producentów OEM.

Ta personalizacja może spowodować, że nawet 50% kodu jądra będzie stanowić kod spoza drzewa, a nie z górnego jądra Linuxa ani ACK. W związku z tym niestandardowy charakter jąder przed GKI spowodował znaczną fragmentację jądra.

Koszty podziału

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

Aktualizacje zabezpieczeń wymagają dużo pracy

poprawki bezpieczeństwa wymienione w Informacjach o bezpieczeństwie Androida (ASB) muszą zostać przeniesione do jądra każdego urządzenia. Jednak ze względu na fragmentaryzację jądra rozpowszechnianie poprawek zabezpieczeń na urządzeniach z Androidem w warunkach rzeczywistych jest bardzo kosztowne.

Trudno scalić aktualizacje dotyczące długoterminowego wsparcia

Wersje Long-Term Supported (LTS) zawierają poprawki zabezpieczeń i inne ważne poprawki błędów. Utrzymywanie aktualności wersji LTS okazało się najbardziej skutecznym sposobem na dostarczanie poprawek bezpieczeństwa. Na urządzeniach Pixel wykryliśmy, że 90% problemów z zabezpieczeniami jądra zgłoszonych w ASB zostało już rozwiązanych na urządzeniach, które są aktualne.

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 nowych funkcji Androida wymagających zmian w rdzeniu na urządzeniach w użyciu. Kod platformy Android Framework musiał uwzględniać różne warianty jądra i nie mógł polegać na nowych funkcjach Androida implementowanych w jądrze. Opóźniało to wprowadzanie innowacji i zwiększyło rozmiar oraz złożoność kodu.

Trudno jest przesłać zmiany jądra do upstream Linuksa

Rozproszony sposób pobierania poprawek do jąder produkcyjnych spowodował opóźnienie do 18 miesięcy od momentu udostępnienia wersji LTS w łańcuchu dostawy do momentu jej wdrożenia na urządzeniu. Długi czas między wydaniem jądra upstream a produktami utrudnia społeczności Androida wprowadzanie potrzebnych funkcji i sterowników do jąder upstream. W czasie, gdy użytkownik przesłał sugestie dotyczące ulepszeń, baza kodu uległa zmianie, przez co trudno było pokazać trafność poprawki.

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

Projekt Generic Kernel Image (GKI) rozwiązuje problem fragmentacji jądra poprzez ujednolicenie jądra jądra i przeniesienie obsługi SoC i płytki do ładowania z jądra do modułów dostawców. GKI udostępnia też stabilny interfejs Kernel Module Interface (KMI) dla modułów dostawców, dzięki czemu moduły i jądro mogą być aktualizowane niezależnie. Oto niektóre cechy jądra GKI:

  • Kernel GKI jest tworzony na podstawie źródeł ACK.
  • Kernel GKI to pojedynczy plik binarny jądra wraz z powiązanymi modułami wczytywalnymi na każdą architekturę i wersję LTS.
  • Kernel GKI jest testowany ze wszystkimi wersjami platformy Android, które są obsługiwane w powiązanym ACK. W trakcie trwania wersji rdzenia GKI nie wycofujemy funkcji.
  • Jądro GKI udostępnia stabilne KMI kierowcom w ramach danego LTS.
  • Rdzeń GKI nie zawiera kodu związanego z procesorem SoC ani płytą główną.

Obraz architektury GKI znajdziesz w artykule Omówienie jądra.

Zdjęcie ogólne

W przypadku Androida 12 urządzenia z jądrem w wersji 5.10 lub nowszej muszą być dostarczane z jądrem GKI. Obrazy Generic Kernel Image (GKI) są regularnie aktualizowane i zawierają poprawki LTS oraz poprawki krytycznych błędów. Ponieważ stabilność plików binarnych jest utrzymywana w przypadku KMI, możesz instalować te obrazy rozruchu bez wprowadzania zmian w obrazach dostawcy. Projekt GKI ma następujące cele:

  • Nie wprowadzaj znacznych regresji wydajności ani mocy podczas zastępowania jądra produktu jądrem GKI.
  • Umożliwianie partnerom dostarczania poprawek zabezpieczeń i poprawek błędów jądra bez udziału dostawcy.
  • Zmniejsz koszty aktualizacji głównej wersji jądra na urządzeniach.
  • Utrzymywanie pojedynczego binarnego jądra GKI na każdą architekturę przez aktualizowanie wersji jądra za pomocą przejrzystego procesu uaktualniania.