Omówienie modułów jądra

Istnieją 2 typy modułów jądra: niezależne od sprzętu Moduły GKI i specyficzne dla sprzętu modułów dostawców. Ta strona zawiera omówienie obu typów modułów.

Moduły GKI

Moduły z ogólnym obrazem jądra (GKI) służą do dostarczania jądra systemu, który nie wymaga rozruchu funkcje niezależne od ogólnego jądra systemu operacyjnego. Dzięki modułom GKI można wybrać konkretne funkcje jądra, które mają zostać użyte, często zmniejszając rozmiar obrazu jądra; i wykorzystania pamięci środowiska wykonawczego. Mniejszy rozmiar sprawia, że GKI doskonale nadaje się urządzeń z Androidem Go i innych formatów o ograniczonych zasobach.

Moduły GKI zapewniają również mechanizm umożliwiający dostawcom wdrażanie nowych funkcji dodatkowych po osiągnięciu progu zamrożenia przez KMI. Wbudowany kod nie można zastąpić bez utworzenia nowego obrazu, natomiast kod dostarczony w postaci moduł można zastąpić innym.

Moduły GKI wykorzystują infrastrukturę podpisywania w czasie kompilacji jądra do rozróżniania między GKI a innymi modułami w czasie działania. Można ładować niepodpisane moduły pod warunkiem, że zawierają wyłącznie symbole występujące na liście dozwolonych lub dostarczone przez inne podmioty bez podpisu.

Istnieją 2 logiczne typy modułów GKI: chroniony moduł GKI. i niechroniony moduł GKI.

Chroniony moduł GKI

Chroniony moduł GKI jest dostarczany przez Google, nie jest w żaden sposób ograniczony oraz po załadowaniu wygląda tak, jakby zostało utworzone przy użyciu jądra systemu operacyjnego. Dodatkowo: chronione moduły GKI mają następujące cechy:

  • Chronione moduły GKI mają dostęp do symboli jądra systemu innych niż KMI, które nie są dostępne dla modułów dostawcy lub niechronionych modułów GKI.
  • Chronione moduły GKI mogą eksportować symbole, które stają się częścią platformy KMI o ile te symbole są cytowane na liście symboli.
  • Chronionych modułów GKI nie można zastąpić modułami dostawcy.

Chroniony moduł GKI to domyślna klasa modułów GKI. Wszystkie GKI moduły są uważane za chronione w momencie blokady KMI.

Niezabezpieczony moduł GKI

Niezabezpieczony moduł GKI można zastąpić modułem dostawcy. Po przerwie w działaniu KMI chroniony moduł GKI może zostać zmieniony na niezabezpieczony, jeśli zespół GKI decyduje, że dostawcy muszą zastąpić domyślną implementację w wersji, która zawiera nowe funkcje ze starszej wersji Linuksa. Następne wersja GKI; niechronione moduły są ponownie klasyfikowane jako chronione po kod nadrzędny trafia do wspólnego jądra Androida (ACK). Niechronione moduły GKI mają następujące cechy:

  • Niechronione moduły GKI mają taki sam dostęp do wyeksportowanych symboli co dostawca modułów.
  • Niechronione moduły GKI nie mogą eksportować symboli wyeksportowanych przez chronione GKI modułów.
  • Niechronione moduły GKI muszą zachowywać wszystkie interfejsy KMI jako część i jednego jądra systemu operacyjnego.
  • Niechronione moduły GKI mogą zostać zastąpione modułami dostawcy.

Moduły dostawcy

Partner dostarcza moduł dostawcy, który umożliwia wdrożenie układów SOC i związanych z określonym urządzeniem funkcje zabezpieczeń. Dowolny istniejący moduł jądra, który nie jest częścią Jądro GKI można dostarczyć jako moduł dostawcy.

Ponieważ jednym z głównych celów projektu GKI jest konkretnego kodu w rdzeniu podstawowym, dostawcy mogą oczekiwać, że interfejs GKI jądro nie będzie zawierać modułów, które wyraźnie zarządzają własnym sprzętem. Dla: na przykład dostawca ABC Inc. może oczekiwać, że konfiguracje takie jak Aplikacja CONFIG_ABC_SOC_SUPPORT nie będzie włączona ani ładowalna, ani wbudowana bez obsługi modułów GKI.

Jeśli sterownik jądra lub platforma istnieje w potwierdzeniu, ale nie jest częścią jądra GKI, dostawcy mogą modyfikować sterownik i dostarczać go jako dostawca . Odradzamy wprowadzanie takich modyfikacji w przypadku modułów niepowiązanych z określonym dostawcą. ponieważ te same funkcje mogą być udostępniane przez jądro GKI w przyszłą wersję. Gdy jądro GKI zawiera funkcje udostępnione przez dostawcę. moduł dostawcy nie zostanie wczytany. Przykład: Na Androidzie 11 interfejs CONFIG_GREYBUS nie jest skonfigurowany dla GKI, dostawcy mogą dostarczać moduły dostawców Greybus. Jednak CONFIG_GREYBUS może być włączony jako wbudowany moduł lub moduł GKI w Androidzie 12, w którym przypadku moduły dostawcy Greybus nie zostaną wczytane. Sprawdzoną metodą jest ze starszej wersji sterowników niepowiązanych z konkretnym dostawcą, jeśli są one dostarczane jako modułów dostawcy.

Moduły dostawcy możesz przesłać w vendor lub vendor_boot. . Moduły wymagane na początku procesu rozruchu muszą być w języku vendor_boot. Wczytywanie modułów z vendor_boot wiąże się z kosztem uruchamiania.