Ikhtisar modul kernel

Ada dua jenis modul kernel: modul GKI agnostik perangkat keras dan modul vendor khusus perangkat keras . Halaman ini memberikan gambaran umum tentang kedua jenis modul.

Modul GKI

Modul Generic Kernel Image (GKI) digunakan untuk memberikan fungsionalitas kernel yang tidak memerlukan booting, terpisah dari kernel inti generik. Dengan modul GKI, Anda dapat memilih fungsionalitas kernel tertentu untuk digunakan, yang sering kali mengurangi ukuran image kernel dan konsumsi memori runtime. Pengurangan ukuran ini membuat GKI cocok untuk perangkat Android Go dan perangkat dengan sumber daya terbatas lainnya.

Modul GKI juga menyediakan mekanisme yang memungkinkan vendor menggabungkan fitur upstream baru setelah pencapaian pembekuan KMI. Kode bawaan tidak dapat diganti tanpa membuat image lain, sedangkan kode yang dikirimkan sebagai modul dapat diganti dengan modul lain.

Modul GKI menggunakan infrastruktur penandatanganan waktu build kernel untuk membedakan antara GKI dan modul lain pada waktu proses. Modul yang tidak ditandatangani diperbolehkan dimuat selama modul tersebut 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 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 permukaan KMI selama simbol tersebut disebutkan dalam daftar simbol.
  • Modul GKI yang dilindungi tidak dapat diganti oleh modul vendor.

Modul GKI yang dilindungi adalah kelas default modul GKI. Semua modul GKI dianggap terlindungi pada saat KMI dibekukan.

Modul GKI yang tidak terlindungi

Modul GKI yang tidak dilindungi dapat diganti oleh modul vendor. Setelah KMI dibekukan, modul GKI yang dilindungi mungkin diklasifikasikan ulang sebagai tidak terlindungi 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 menjadi terlindungi setelah kode upstream dimasukkan ke dalam Android Common Kernel (ACK). Modul GKI yang tidak dilindungi memiliki karakteristik sebagai 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 mitra untuk mengimplementasikan SoC dan fungsionalitas khusus perangkat. Modul kernel apa pun yang tidak dikirimkan sebagai bagian dari kernel GKI dapat dikirimkan sebagai modul vendor.

Karena salah satu tujuan utama proyek GKI adalah meminimalkan kode khusus perangkat keras di kernel inti, vendor dapat berharap bahwa kernel GKI tidak akan menyertakan modul yang secara jelas mengelola perangkat keras mereka sendiri. Misalnya, vendor ABC Inc, dapat memperkirakan bahwa konfigurasi seperti CONFIG_ABC_SOC_SUPPORT tidak akan diaktifkan baik sebagai modul GKI bawaan atau yang dapat dimuat tanpa dukungannya.

Jika driver atau kerangka kerja kernel ada di ACK, tetapi tidak dikirimkan sebagai bagian dari kernel GKI, vendor dapat memodifikasi driver dan mengirimkannya sebagai modul vendor. Modifikasi seperti itu tidak disarankan untuk modul yang tidak spesifik untuk vendor karena fungsi yang sama mungkin dikirimkan dengan kernel GKI pada rilis mendatang. Jika kernel GKI berisi fungsionalitas yang disediakan oleh modul vendor, modul vendor tidak akan dimuat. Misalnya, CONFIG_GREYBUS tidak disetel untuk GKI di Android 11, sehingga vendor dapat mengirimkan modul vendor greybus. Namun, CONFIG_GREYBUS mungkin diaktifkan sebagai modul atau bawaan GKI di Android 12, sehingga modul vendor greybus tidak akan dimuat. Praktik terbaiknya adalah menggunakan versi upstream dari driver yang tidak spesifik untuk vendor jika dikirimkan sebagai modul vendor.

Anda dapat mengirimkan modul vendor di gambar vendor atau vendor_boot . Modul yang dibutuhkan di awal proses booting harus ada di vendor_boot . Ada biaya waktu boot yang terkait dengan memuat modul dari vendor_boot .