Ten dokument zawiera odpowiedzi na najczęstsze pytania dotyczące jądra Androida, znanego również jako jądro GKI (Generic Kernel Image). Jeśli nie znasz terminologii związanej z GKI i jądrem GKI, zapoznaj się z omówieniem jądra.
Czy listy symboli interfejsu modułu jądra (KMI) mogą ulec zmianie w stabilnym jądrze?
Zmiany, które nie mają wpływu na istniejący interfejs KMI, można dodawać do jąder, które są zamrożone. Te zmiany obejmują nowe wyeksportowane funkcje i wpisy na liście symboli. Więcej informacji znajdziesz w artykule Zarządzanie listami symboli.
Czy mogę zmieniać struktury używane przez moduły dostawców w stabilnym jądrze?
Struktur, które są częścią interfejsu KMI, nie można zmieniać w jądrach z zamrożonym interfejsem KMI. Przed zamrożeniem KMI te struktury można zmieniać.
Czy mogę zmienić jądro, o ile nie naruszę zgodności binarnej ani zgodności kodu źródłowego?
Zmiany, które nie mają wpływu na KMI, można wprowadzać w sposób opisany w sekcji Poprawki dotyczące Androida.
Jak GKI obsługuje konfigurację jądra?
Informacje o konfiguracji jądra znajdziesz w sekcji Zmiany w gki_defconfig.
Jak obsługiwać poprawki błędów w przypadku nadpisywania istniejących modułów GKI?
Jeśli utworzysz moduł dostawcy na podstawie sterownika w wspólnym jądrze Androida (ACK), musisz zadbać o to, aby poprawki błędów z wersji nadrzędnej i ACK były przenoszone do Twojego modułu. Zwykle najlepiej jest używać jądra GKI i modułów GKI bez modyfikacji, aby aktualizacje były dostarczane przez Google w spójny sposób.
Czy są testy specyficzne dla GKI?
Istnieją testy Vendor Test Suite (VTS), które sprawdzają, czy zainstalowana jest certyfikowana kompilacja GKI, a także wymuszają wymagania GKI dla poszczególnych wersji. Na przykład istnieją testy VTS dla Androida 12 dotyczące nagłówka rozruchowego w wersji 3 i weryfikacji istnienia wymaganych partycji na urządzeniu z jądrem 5.10.
Jak utworzyć plik fragmentu defconfig projektu na potrzeby kompilacji urządzenia?
Wiele urządzeń zgodnych z GKI używa fragmentu konfiguracji do opisywania opcji konfiguracji potrzebnych do tworzenia modułów dostawcy, oprócz gki_defconfig.
Przykłady, które są częścią bazy kodu ACK, to Cuttlefish i DB845c.
Nie da się uniknąć ręcznego sprawdzania opcji konfiguracji, aby zoptymalizować fragment, ale scripts/diffconfig ze źródeł jądragki_defconfig jest przydatne do porównywania wyników gki_defconfig i gki_defconfig+device.fragment.
Czy istnieje obejście problemu z traktowaniem przez modprobe znaków „-” i „_” jako równoważnych?
Na stronie podręcznika polecenia modprobe znajduje się ten opis: „modprobe inteligentnie dodaje lub usuwa moduł z jądra systemu Linux: warto zauważyć, że dla wygody nie ma różnicy między znakiem _ a – w nazwach modułów (automatyczna konwersja podkreślenia jest wykonywana)”. Zespół GKI przestrzega standardowej konwencji upstream, więc narzędzia dostawcy lub konwencje nazewnictwa modułów muszą uwzględniać to przestrzeganie.
Jak włączyć debugfs do użytku wewnętrznego?
Więcej informacji o włączaniu debugfs znajdziesz w sekcji intrusive downstream debug features (w języku angielskim).
Jak rozwiązać problem z niezgodnymi interfejsami ABI między jądrem GKI a określoną konfiguracją modułu?
Niezgodne interfejsy ABI między jądrem GKI a konfiguracją modułu stanowią niejawną zależność konfiguracji modułu, w której włączenie modułu powoduje wbudowanie konfiguracji binarnej w wynikowy obraz jądra. Skontaktuj się z zespołem ds. jądra Androida (kernel-team@android.com), aby ustalić dalsze kroki. Po ustaleniu listy symboli utwórz błąd w Issue Trackerze i prześlij zmianę na listę symboli.