Istnieją 2 typy modułów jądra: moduły GKI niezależne od sprzętu i moduły dostawcy zależne od sprzętu. Na tej stronie znajdziesz omówienie obu typów modułów.
Moduły GKI
Moduły ogólnego obrazu jądra (GKI) są używane do dostarczania funkcji jądra, które nie są wymagane do uruchamiania, oddzielnie od ogólnego jądra rdzenia. Dzięki modułom GKI możesz wybrać konkretne możliwości jądra, które chcesz wykorzystać, co często powoduje zmniejszenie rozmiaru obrazu jądra i zużycia pamięci w czasie działania. Zmniejszenie rozmiaru sprawia, że GKI doskonale nadaje się do urządzeń z Androidem Go i innych form czynników ograniczonych zasobami.
Moduły GKI zapewniają też mechanizm, który pozwala dostawcom wdrażać nowe funkcje wschodzące po etapie zamrożenia KMI. Wbudowany kod nie może zostać zastąpiony bez utworzenia innego obrazu, natomiast kod dostarczony jako moduł może zostać zastąpiony przez inny moduł.
Moduł GKI korzysta z infrastruktury podpisywania w czasie kompilacji jądra, aby odróżniać GKI od innych modułów w czasie wykonywania. Moduły bez podpisu mogą się wczytywać, o ile używają tylko symboli znajdujących się na liście dozwolonych lub dostarczonych przez inne moduły 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 i po załadowaniu zachowuje się tak, jakby został skompilowany z jądrem. Dodatkowo chronione moduły GKI mają te cechy:
- Chronione moduły GKI mają dostęp do symboli jądra innych niż KMI, które nie są dostępne dla modułów dostawców ani niezabezpieczonych modułów GKI.
- Chronione moduły GKI mogą eksportować symbole, które stają się częścią interfejsu KMI, o ile są one wymienione na liście symboli.
- Chronione moduły GKI nie mogą być zastępowane przez moduły dostawców.
Chroniony moduł GKI należy do domyślnej klasy modułów GKI. Wszystkie moduły GKI są uważane za chronione w momencie zamrożenia KMI.
Moduł GKI bez zabezpieczeń
Niechroniony moduł GKI może zostać zastąpiony przez moduł dostawcy. Po zamrożeniu KMI chroniony moduł GKI może zostać przeklasyfikowany jako niezabezpieczony, jeśli zespół GKI zdecyduje, że dostawcy muszą zastąpić domyślną implementację wersją, która zawiera nowe funkcje z upstreamowego systemu Linux. W następnej wersji GKI niezabezpieczone moduły zostaną zaklasyfikowane jako chronione, gdy kod źródłowy z wyższego poziomu zostanie umieszczony w Android Common Kernel (ACK). Niechronione moduły GKI mają te cechy:
- Niechronione moduły GKI mają taki sam dostęp do wyeksportowanych symboli jak moduły dostawców.
- Niechronione moduły GKI nie mogą eksportować symboli wyeksportowanych przez chronione moduły GKI.
- Niechronione moduły GKI muszą zachować wszystkie interfejsy KMI tak, jakby były częścią rdzenia jądra.
- Niechronione moduły GKI mogą być zastępowane przez moduły dostawców.
Moduły dostawców
Moduł dostawcy jest dostarczany przez partnerów w celu implementacji funkcji związanych z procesorem i urządzeniem. Każdy istniejący moduł jądra, który nie jest dostarczany jako część jądra GKI, może być dostarczany jako moduł dostawcy.
Jednym z głównych celów projektu GKI jest zminimalizowanie kodu związanego z konkretnym sprzętem w rdzeniach jądra, dlatego dostawcy mogą oczekiwać, że rdzeń GKI nie będzie zawierał modułów, które wyraźnie zarządzają ich własnym sprzętem. Na przykład dostawca ABC Inc. może oczekiwać, że konfiguracje takie jak CONFIG_ABC_SOC_SUPPORT
nie będą włączone jako wbudowane lub ładowalne moduły GKI bez ich obsługi.
Jeśli sterownik lub framework jądra jest dostępny w ACK, ale nie jest dostarczany w ramach jądra GKI, dostawcy mogą zmodyfikować sterownik i dostarczyć go jako moduł dostawcy. Nie zalecamy wprowadzania takich modyfikacji w przypadku modułów niebędących modułami konkretnych dostawców, ponieważ w przyszłej wersji jądra GKI mogą być dostępne te same funkcje. Jeśli jądro GKI zawiera funkcje udostępnione przez moduł dostawcy, moduł dostawcy nie zostanie załadowany. Na przykład w Androidzie 11 atrybut CONFIG_GREYBUS
nie jest ustawiany w przypadku GKI, więc dostawcy mogą dostarczać moduły dostawcy greybus. CONFIG_GREYBUS
może jednak zostać włączony jako wbudowany moduł GKI lub moduł w Androidzie 12. W takim przypadku moduły dostawców w szarej sieci nie będą wczytywane. Sprawdzoną metodą jest używanie wersji upstream sterowników niewymagających instalacji, jeśli są one dostarczane jako moduły dostawcy.
Moduły dostawcy możesz przesyłać w ramach vendor
lub obrazu vendor_boot
. Moduły wymagane na wczesnym etapie procesu uruchamiania muszą znajdować się w vendor_boot
.
Ładowanie modułów z vendor_boot
wiąże się z kosztem na etapie uruchamiania.