Ada dua jenis modul kernel: modul GKI yang tidak bergantung pada hardware dan modul vendor khusus hardware. Halaman ini memberikan ringkasan tentang kedua jenis modul.
Modul GKI
Modul image kernel generik (GKI) digunakan untuk menghadirkan 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 ini membuat GKI sangat cocok untuk perangkat Android Go dan faktor bentuk lain yang memiliki batasan resource.
Modul GKI juga menyediakan mekanisme bagi vendor untuk menyertakan fitur upstream baru setelah tonggak pencapaian pembekuan KMI. Kode bawaan tidak dapat diganti tanpa membuat gambar lain, sedangkan kode yang dikirimkan sebagai modul dapat diganti dengan modul lain.
Modul GKI menggunakan infrastruktur penandatanganan waktu pembuatan kernel untuk membedakan antara GKI dan modul lain saat runtime. Modul yang tidak ditandatangani diizinkan untuk dimuat selama hanya menggunakan simbol yang muncul di daftar yang diizinkan atau disediakan oleh modul lain yang tidak ditandatangani.
Ada dua jenis logis modul GKI: 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 dibangun 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 terlindungi adalah class default modul GKI. Semua modul GKI dianggap terlindungi pada saat KMI dihentikan.
Modul GKI yang tidak dilindungi
Modul GKI yang tidak dilindungi dapat diganti oleh modul vendor. Setelah KMI dibekukan, 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 dilindungi setelah kode upstream masuk ke 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 semua antarmuka KMI seolah-olah merupakan bagian dari kernel inti.
- Modul GKI yang tidak dilindungi dapat diganti oleh modul vendor.
Modul vendor
Modul vendor dikirimkan oleh partner untuk menerapkan kemampuan SoC dan khusus perangkat. Setiap modul kernel yang ada dan tidak dikirimkan sebagai bagian dari kernel GKI dapat dikirimkan sebagai modul vendor.
Karena salah satu tujuan utama project GKI adalah meminimalkan kode khusus hardware di kernel inti, vendor dapat memperkirakan bahwa kernel GKI tidak akan menyertakan modul yang jelas mengelola hardwarenya sendiri. Misalnya, vendor ABC Inc. dapat memperkirakan 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 semacam itu tidak disarankan untuk modul non-spesifik vendor karena kemampuan yang sama mungkin akan 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 bawaan atau modul GKI di Android 12, sehingga modul vendor greybus tidak akan dimuat. Praktik terbaiknya adalah menggunakan
driver versi upstream yang tidak spesifik untuk vendor jika driver tersebut dikirimkan 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
.