Ringkasan modul kernel

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 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 mem-build image lain, sedangkan kode yang dikirim sebagai modul dapat diganti oleh 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 yang 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 di-build 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 modul GKI. Semua modul GKI dianggap dilindungi pada saat pembekuan KMI.

Modul GKI yang tidak dilindungi

Modul GKI yang tidak dilindungi dapat diganti oleh modul vendor. Setelah pembekuan KMI, modul GKI yang dilindungi mungkin 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 di-deploy 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 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 SoC dan kemampuan khusus perangkat. Setiap modul kernel yang ada dan tidak dikirimkan sebagai bagian dari kernel GKI dapat dikirimkan 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 driver versi upstream yang bukan khusus 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.