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.