Najczęstsze pytania dotyczące jądra Androida

W tym dokumencie znajdziesz odpowiedzi na najczęstsze pytania dotyczące jądra Androida, znanego też jako Generic Kernel Image (GKI). Jeśli nie znasz terminologii związanej z jądrem GKI i GKI, zapoznaj się z omówieniem jądra.

Czy listy symboli interfejsu Kernel Module Interface (KMI) można zmieniać w stabilnej wersji jądra?

Zmiany, które nie wpływają na istniejące KMI, można dodawać do jąder, które są zamrożone. Te zmiany obejmują nowe wyeksportowane funkcje i elementy listy symboli. Więcej informacji znajdziesz w artykule Zarządzanie listami symboli.

Czy mogę zmienić struktury używane przez moduły dostawców w stabilnym jądrze?

Struktury, które są częścią interfejsu KMI, nie mogą być zmieniane w jądrach z zamrożonym KMI. Przed zamrożeniem KMI te struktury mogą ulec zmianie.

Czy mogę zmienić jądro, o ile nie naruszy to zgodności binarnej ani źródłowej?

Zmiany, które nie wpływają na KMI, można wprowadzić zgodnie z opisem w specjalnych poprawkach dotyczących Androida.

Jak GKI obsługuje konfigurację jądra?

Informacje o konfiguracji jądra znajdziesz w artykule Zmiany w pliku gki_defconfig.

Jak obsługiwać poprawki błędów w upstreamie w przypadku zastąpienia dotychczasowych modułów GKI?

Jeśli tworzysz moduł dostawcy na podstawie sterownika w Android Common Kernel (ACK), musisz zadbać o to, aby poprawki błędów z upstreamu i ACK były propagowane do Twojego modułu. Zazwyczaj warto używać jądra i modułów GKI bez wprowadzania zmian, aby te aktualizacje były dostarczane przez Google w sposób spójny.

Czy są jakieś testy dotyczące GKI?

Istnieją testy Vendor Test Suite (VTS), które sprawdzają, czy zainstalowana jest certyfikowana wersja GKI, a także czy spełnia ona wymagania dotyczące GKI dla danej wersji. Na przykład w Androidzie 12 dostępne są testy VTS dotyczące nagłówka uruchamiania w wersji 3, a także testy weryfikujące istnienie wymaganych partycji na urządzeniu z jądrem w wersji 5.10.

Jak utworzyć plik fragmentu defconfig projektu na potrzeby kompilacji na urządzeniu?

Wiele urządzeń zgodnych z GKI używa fragmentu konfiguracji, aby opisać opcje konfiguracji potrzebne do tworzenia modułów dostawcy (oprócz gki_defconfig). Przykłady, które są częścią kodu źródłowego ACK, to Cuttlefish i DB845c. Nie da się uniknąć ręcznego sprawdzania opcji konfiguracji w celu optymalizacji fragmentu, ale scripts/diffconfig z źródeł jądra jest przydatne do porównywania wyników gki_defconfiggki_defconfig+device.fragment.

Czy istnieje obejście problemu polegającego na tym, że modprobe traktuje znaki - i _ jako równoważne?

Strona modprobe man zawiera ten opis: „modprobe inteligentnie dodaje lub usuwa moduł z jądra Linuxa. Pamiętaj, że dla wygody nie ma różnicy między _ a – w nazwach modułów (automatycznie wykonywana jest konwersja na znak podkreślenia). Zespół GKI przestrzega standardowej konwencji upstream, więc konwencje nazewnictwa narzędzi dostawcy lub modułów muszą być z nią zgodne.

Jak włączyć debugfs do użytku wewnętrznego?

Szczegółowe informacje o włączaniu debugfs znajdziesz w artykule Intruzywne funkcje debugowania na dalszych poziomach.

Jak rozwiązać problem niepasujących ABI między jądrem GKI z włączoną konkretną konfiguracją modułu?

Niezgodne ABI między konfiguracją jądra GKI a modułem stanowią ukrytą zależność konfiguracji modułu, w której włączenie modułu powoduje wbudowanie binarnej konfiguracji w wygenerowany obraz jądra. Skontaktuj się z zespołem odpowiedzialnym za jądro Androida (kernel-team@android.com), aby ustalić dalsze działania. Po ustaleniu listy symboli utwórz błąd w Issue Tracker i prześlij zmianę do listy symboli.