Najczęstsze pytania dotyczące jądra Androida

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 upstream 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 konsekwentnie dostarczane przez Google.

Czy są jakieś 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 sprawdzania, czy na urządzeniu z jądrem 5.10 znajdują się wymagane partycje.

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 w celu optymalizacji fragmentu, ale scripts/diffconfig ze źródeł jądra przydaje się do porównywania wyników gki_defconfiggki_defconfig+device.fragment.

Czy istnieje obejście problemu z traktowaniem przez modprobe znaków „-” i „_” jako równoważnych?

Strona podręcznika modprobe zawiera ten opis: „modprobe inteligentnie dodaje lub usuwa moduł z jądra systemu Linux: pamiętaj, że dla wygody nie ma różnicy między _ a – w nazwach modułów (automatyczna konwersja podkreślenia jest wykonywana)”. Zespół GKI przestrzega standardowej konwencji upstream, więc narzędzia dostawców 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?

Niezgodność interfejsów 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.