Ada dua jenis modul kernel: modul GKI agnostik hardware dan modul vendor khusus hardware. Halaman ini memberikan ringkasan tentang kedua jenis modul tersebut.
Modul GKI
Modul image kernel generik (GKI) digunakan untuk memberikan kemampuan kernel yang tidak diperlukan untuk booting secara terpisah dari kernel inti generik. Dengan modul GKI, Anda dapat memilih kemampuan kernel tertentu untuk digunakan, yang sering kali mengurangi ukuran image kernel dan konsumsi memori runtime. Pengurangan ukuran membuat GKI sangat cocok untuk perangkat Android Go dan faktor bentuk lain yang dibatasi resource.
Modul GKI juga menyediakan mekanisme untuk memungkinkan vendor menggabungkan fitur upstream baru setelah pencapaian pembekuan KMI. Kode bawaan tidak dapat diganti tanpa membuat gambar lain, sedangkan kode yang dikirim sebagai modul dapat diganti dengan modul lain.
Modul GKI menggunakan infrastruktur penandatanganan waktu build kernel untuk membedakan antara GKI dan modul lainnya saat runtime. Modul yang tidak ditandatangani diizinkan untuk dimuat asalkan hanya menggunakan simbol yang muncul di daftar yang diizinkan atau disediakan oleh modul lain yang tidak ditandatangani.
Ada dua jenis modul GKI logis: modul GKI yang dilindungi dan modul GKI yang tidak dilindungi.
Modul GKI yang dilindungi
Modul GKI yang dilindungi dikirimkan oleh Google, tidak dibatasi dengan cara apa pun, dan berperilaku seolah-olah dibuat dengan kernel setelah dimuat. Selain itu, modul GKI yang dilindungi memiliki karakteristik berikut:
- Modul GKI yang dilindungi memiliki akses ke simbol kernel non-KMI yang tidak tersedia untuk modul vendor atau modul GKI yang tidak dilindungi.
- Modul GKI yang dilindungi dapat mengekspor simbol yang menjadi bagian dari platform KMI selama simbol tersebut dikutip dalam daftar simbol.
- Modul GKI yang dilindungi tidak dapat diganti oleh modul vendor.
Modul GKI yang dilindungi adalah class default dari modul GKI. Semua modul GKI dianggap terlindungi pada saat pembekuan KMI.
Modul GKI tidak dilindungi
Modul GKI yang tidak dilindungi dapat diganti oleh modul vendor. Setelah pembekuan KMI, modul GKI yang dilindungi dapat diklasifikasikan ulang sebagai tidak dilindungi jika tim GKI memutuskan bahwa vendor perlu mengganti implementasi default dengan versi yang menyertakan fitur baru dari Linux upstream. Pada rilis GKI berikutnya, modul yang tidak dilindungi akan diklasifikasikan ulang sebagai terlindungi setelah kode upstream diterima di Android Common Kernel (ACK). Modul GKI yang tidak dilindungi memiliki karakteristik berikut:
- Modul GKI yang tidak dilindungi memiliki akses yang sama ke simbol yang diekspor seperti modul vendor.
- Modul GKI yang tidak dilindungi tidak dapat mengekspor simbol yang diekspor oleh modul GKI yang dilindungi.
- Modul GKI yang tidak dilindungi harus mempertahankan setiap antarmuka KMI seolah-olah merupakan bagian dari kernel inti.
- Modul GKI yang tidak dilindungi dapat diganti oleh modul vendor.
Modul vendor
Modul vendor disediakan oleh partner untuk mengimplementasikan kemampuan khusus perangkat dan SoC. Setiap modul kernel yang ada dan tidak dikirim sebagai bagian dari kernel GKI dapat dikirim sebagai modul vendor.
Karena salah satu sasaran utama project GKI adalah meminimalkan
kode khusus hardware di kernel inti, vendor dapat mengharapkan bahwa kernel
GKI tidak akan menyertakan modul yang secara jelas mengelola hardware mereka sendiri. Misalnya, vendor ABC Inc. dapat mengharapkan bahwa konfigurasi seperti
CONFIG_ABC_SOC_SUPPORT
tidak akan diaktifkan sebagai modul GKI bawaan atau
yang dapat dimuat tanpa dukungan mereka.
Jika driver atau framework kernel ada di ACK, tetapi tidak dikirim sebagai bagian dari
kernel GKI, vendor dapat mengubah driver dan mengirimkannya sebagai modul
vendor. Modifikasi tersebut tidak dianjurkan untuk modul non-khusus vendor
karena kemampuan yang sama mungkin dikirimkan dengan kernel GKI dalam
rilis mendatang. Jika kernel GKI berisi kemampuan yang disediakan oleh modul
vendor, modul vendor tidak akan dimuat. Misalnya,
CONFIG_GREYBUS
tidak ditetapkan untuk GKI di Android 11, sehingga
vendor dapat mengirimkan modul vendor greybus. Namun, CONFIG_GREYBUS
mungkin
diaktifkan sebagai modul bawaan atau GKI di Android 12, yang
dalam hal ini modul vendor greybus tidak akan dimuat. Praktik terbaiknya adalah menggunakan versi upstream dari driver non-khusus vendor jika driver tersebut dikirim sebagai modul vendor.
Anda dapat mengirimkan modul vendor dalam gambar vendor
atau
vendor_boot
. Modul yang diperlukan di awal proses booting harus berada di vendor_boot
.
Ada biaya waktu booting yang terkait dengan pemuatan modul dari vendor_boot
.