Jądro produktu , znane również jako jądro urządzenia lub jądro OEM , to jądro dostarczane na urządzeniu. Przed GKI jądro produktu pochodziło z serii wcześniejszych zmian jądra. Rysunek 1 pokazuje, w jaki sposób dodatki do jądra dają jądro produktu (jądro OEM/urządzenie):
Rysunek 1. Budowa jądra produktu sprzed wersji GKI.
- Jądro Linux Long Term Supported (LTS) z kernel.org zostało zmodyfikowane za pomocą poprawek specyficznych dla Androida, w wyniku czego powstał Android Common Kernel (ACK) .
- ACK został zmodyfikowany przez dostawców, którzy dodali obsługę swojego System-on-a-Chip (SoC). Dostawcy mogą również dodać optymalizacje wydajności lub mocy. Wynikowe jądro jest nazywane jądrem dostawcy .
- Wreszcie, jądro dostawcy zostało dalej zmodyfikowane przez producentów OEM z dodatkowymi sterownikami urządzeń i dostosowaniami, które uznali za konieczne. Wynikowe jądro jest nazywane jądrem produktu .
Wszystkie te modyfikacje mogą spowodować, że nawet 50% kodu jądra będzie kodem spoza drzewa, a nie z wcześniejszych jąder Linuksa lub ACK. Przed GKI prawie każde urządzenie miało niestandardowe jądro, które powodował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 bezpieczeństwa wymienione 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ści w łączeniu długoterminowych obsługiwanych aktualizacji
Wersje z obsługą długoterminową (LTS) obejmują poprawki zabezpieczeń i inne krytyczne poprawki błędów. Bycie na bieżąco z wersjami LTS okazało się najskuteczniejszym sposobem dostarczania 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 dla urządzeń, które są aktualne.
Jednak przy wszystkich niestandardowych modyfikacjach w jądrach urządzeń trudno jest po prostu scalić poprawki LTS w jądrach urządzeń.
Blokuje aktualizacje wydań platformy Android
Fragmentacja utrudnia dodawanie nowych funkcji Androida wymagających 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 Androida 8 w 2017 r.).
Trudno jest przenieść zmiany jądra z powrotem do pierwotnego systemu Linux
Po wszystkich zmianach wprowadzonych w jądrze większość flagowych urządzeń jest dostarczana z wersją jądra, która ma 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 systemem Android korzystające z jądra 4.14 zostały wysłane wiosną 2019 r.
To duże opóźnienie między wydaniem jądra a produktami utrudnia społeczności Androida dostarczanie potrzebnych funkcji i sterowników do jąder.
Naprawianie fragmentacji: Ogólny obraz jądra
Projekt Generic Kernel Image (GKI) zajmuje się fragmentacją jądra poprzez ujednolicenie rdzenia jądra i przeniesienie obsługi SoC i płyty z rdzenia jądra do ładowalnych modułów dostawców. GKI przedstawia również stabilny interfejs modułów 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 ładowalnymi modułami na architekturę, na wydanie LTS (obecnie tylko arm64 dla
android11-5.4
iandroid12-5.4
). - Jądro GKI jest testowane ze wszystkimi wersjami platformy Android, które są obsługiwane przez powiązane ACK. Nie ma 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 dla płyty głównej.
Obraz architektury GKI można znaleźć w omówieniu jądra .
GKI to złożona zmiana, która została wdrożona w kilku etapach, począwszy od jądra wersji 5.4 w wydaniu platformy Android 11.
Obecnie istnieją dwa etapy GKI:
- GKI 1.0 został wprowadzony w Androidzie 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ł wprowadzony w Androidzie 12 dla urządzeń z jądrami 5.10 i jest nowym standardem dla wszystkich urządzeń dostarczanych z jądrami 5.10 lub nowszymi.
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 Vendor Test Suite (VTS) lub Compatibility Test Suite (CTS) podczas zastępowania jądra produktu jądrem GKI.
- Zmniejsz obciążenie partnerów związane z aktualizacją jądra za pomocą wspólnych jąder AOSP.
- Uwzględnij podstawowe zmiany Androida w jądrach w celu aktualizacji i uruchamiania urządzeń z nowymi wersjami Androida.
- Nie psuj przestrzeni użytkownika Androida.
- Oddziel komponenty specyficzne dla sprzętu od rdzenia jądra jako ładowalne moduły.
Aby zapoznać się z dokumentacją GKI 1.0, zobacz sekcję 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 za pomocą poprawek LTS i krytycznych błędów. Ponieważ KMI zachowuje stabilność binarną, można zainstalować te obrazy rozruchowe bez wprowadzania zmian w obrazach dostawców. Cele GKI 2.0 obejmują:
- Nie wprowadzaj znaczących regresji wydajności lub mocy podczas wymiany jądra produktu na jądro GKI.
- Umożliwiaj partnerom dostarczanie poprawek bezpieczeństwa jądra i poprawek błędów bez udziału dostawcy.
- Zmniejsz koszt aktualizacji głównej wersji jądra dla urządzeń (na przykład z wersji 5.10 do jądra 2021 LTS).
- Utrzymuj pojedynczy plik binarny jądra GKI na architekturę, aktualizując wersje jądra z przejrzystym procesem aktualizacji.
GKI 2.0 reprezentuje najbardziej aktualny stan jąder Androida. Dokumentacja jądra poza podsekcjami GKI 1.0 i Poprzednie jądra (<=4.19) odzwierciedla architekturę GKI 2.0.
,Jądro produktu , znane również jako jądro urządzenia lub jądro OEM , to jądro dostarczane na urządzeniu. Przed GKI jądro produktu pochodziło z serii wcześniejszych zmian jądra. Rysunek 1 pokazuje, w jaki sposób dodatki do jądra dają jądro produktu (jądro OEM/urządzenie):
Rysunek 1. Budowa jądra produktu sprzed wersji GKI.
- Jądro Linux Long Term Supported (LTS) z kernel.org zostało zmodyfikowane za pomocą poprawek specyficznych dla Androida, w wyniku czego powstał Android Common Kernel (ACK) .
- ACK został zmodyfikowany przez dostawców, którzy dodali obsługę swojego System-on-a-Chip (SoC). Dostawcy mogą również dodać optymalizacje wydajności lub mocy. Wynikowe jądro jest nazywane jądrem dostawcy .
- Wreszcie, jądro dostawcy zostało dalej zmodyfikowane przez producentów OEM z dodatkowymi sterownikami urządzeń i dostosowaniami, które uznali za konieczne. Wynikowe jądro jest nazywane jądrem produktu .
Wszystkie te modyfikacje mogą spowodować, że nawet 50% kodu jądra będzie kodem spoza drzewa, a nie z wcześniejszych jąder Linuksa lub ACK. Przed GKI prawie każde urządzenie miało niestandardowe jądro, które powodował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 bezpieczeństwa wymienione 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ści w łączeniu długoterminowych obsługiwanych aktualizacji
Wersje z obsługą długoterminową (LTS) obejmują poprawki zabezpieczeń i inne krytyczne poprawki błędów. Bycie na bieżąco z wersjami LTS okazało się najskuteczniejszym sposobem dostarczania 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 dla urządzeń, które są aktualne.
Jednak przy wszystkich niestandardowych modyfikacjach w jądrach urządzeń trudno jest po prostu scalić poprawki LTS w jądrach urządzeń.
Blokuje aktualizacje wydań platformy Android
Fragmentacja utrudnia dodawanie nowych funkcji Androida wymagających 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 Androida 8 w 2017 r.).
Trudno jest przenieść zmiany jądra z powrotem do pierwotnego systemu Linux
Po wszystkich zmianach wprowadzonych w jądrze większość flagowych urządzeń jest dostarczana z wersją jądra, która ma 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 systemem Android korzystające z jądra 4.14 zostały wysłane wiosną 2019 r.
To duże opóźnienie między wydaniem jądra a produktami utrudnia społeczności Androida dostarczanie potrzebnych funkcji i sterowników do jąder.
Naprawianie fragmentacji: Ogólny obraz jądra
Projekt Generic Kernel Image (GKI) zajmuje się fragmentacją jądra poprzez ujednolicenie rdzenia jądra i przeniesienie obsługi SoC i płyty z rdzenia jądra do ładowalnych modułów dostawców. GKI przedstawia również stabilny interfejs modułów 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 ładowalnymi modułami na architekturę, na wydanie LTS (obecnie tylko arm64 dla
android11-5.4
iandroid12-5.4
). - Jądro GKI jest testowane ze wszystkimi wersjami platformy Android, które są obsługiwane przez powiązane ACK. Nie ma 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 dla płyty głównej.
Obraz architektury GKI można znaleźć w omówieniu jądra .
GKI to złożona zmiana, która została wdrożona w kilku etapach, począwszy od jądra wersji 5.4 w wydaniu platformy Android 11.
Obecnie istnieją dwa etapy GKI:
- GKI 1.0 został wprowadzony w Androidzie 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ł wprowadzony w Androidzie 12 dla urządzeń z jądrami 5.10 i jest nowym standardem dla wszystkich urządzeń dostarczanych z jądrami 5.10 lub nowszymi.
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 Vendor Test Suite (VTS) lub Compatibility Test Suite (CTS) podczas zastępowania jądra produktu jądrem GKI.
- Zmniejsz obciążenie partnerów związane z aktualizacją jądra za pomocą wspólnych jąder AOSP.
- Uwzględnij podstawowe zmiany Androida w jądrach w celu aktualizacji i uruchamiania urządzeń z nowymi wersjami Androida.
- Nie psuj przestrzeni użytkownika Androida.
- Oddziel komponenty specyficzne dla sprzętu od rdzenia jądra jako ładowalne moduły.
Aby zapoznać się z dokumentacją GKI 1.0, zobacz sekcję 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 za pomocą poprawek LTS i krytycznych błędów. Ponieważ KMI zachowuje stabilność binarną, można zainstalować te obrazy rozruchowe bez wprowadzania zmian w obrazach dostawców. Cele GKI 2.0 obejmują:
- Nie wprowadzaj znaczących regresji wydajności lub mocy podczas wymiany jądra produktu na jądro GKI.
- Umożliwiaj partnerom dostarczanie poprawek bezpieczeństwa jądra i poprawek błędów bez udziału dostawcy.
- Zmniejsz koszt aktualizacji głównej wersji jądra dla urządzeń (na przykład z wersji 5.10 do jądra 2021 LTS).
- Utrzymuj pojedynczy plik binarny jądra GKI na architekturę, aktualizując wersje jądra z przejrzystym procesem aktualizacji.
GKI 2.0 reprezentuje najbardziej aktualny stan jąder Androida. Dokumentacja jądra poza podsekcjami GKI 1.0 i Poprzednie jądra (<=4.19) odzwierciedla architekturę GKI 2.0.