Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Ikhtisar modul kernel

Ada dua jenis modul kernel: modul GKI agnostik perangkat keras dan modul vendor khusus perangkat keras . Halaman ini memberikan ikhtisar dari kedua jenis modul.

modul GKI

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

Modul GKI juga menyediakan mekanisme yang memungkinkan vendor memasukkan fitur upstream baru setelah tonggak 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 pada waktu proses. Modul yang tidak ditandatangani diizinkan untuk memuat 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 dibuat dengan kernel setelah dimuat. Selain itu, modul GKI yang dilindungi memiliki karakteristik sebagai 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 dikutip 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 pembekuan KMI.

Modul GKI tidak terlindungi

Modul GKI yang tidak dilindungi dapat diganti oleh modul vendor. Setelah KMI dibekukan, modul GKI yang dilindungi dapat diklasifikasi 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 diklasifikasikan ulang sebagai dilindungi setelah kode upstream mendarat di Android Common Kernel (ACK). Modul GKI yang tidak dilindungi memiliki karakteristik sebagai berikut:

  • Modul GKI yang tidak terlindungi 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 sebagai 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. Setiap modul kernel yang ada 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 dalam 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 sebagai modul GKI bawaan atau modul GKI yang dapat dimuat tanpa dukungannya.

Jika driver atau framework 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 bukan khusus vendor karena fungsionalitas yang sama mungkin dikirimkan dengan kernel GKI di rilis mendatang. Saat kernel GKI berisi fungsionalitas yang disediakan oleh modul vendor, modul vendor tidak akan dimuat. Misalnya, CONFIG_GREYBUS tidak disetel untuk GKI di Android 11, jadi vendor dapat mengirimkan modul vendor greybus. Namun, CONFIG_GREYBUS mungkin diaktifkan sebagai modul atau bawaan GKI di Android 12, dalam hal ini modul vendor greybus tidak akan dimuat. Praktik terbaik adalah menggunakan versi upstream dari driver khusus non vendor jika dikirimkan sebagai modul vendor.

Anda dapat mengirim modul vendor di vendor atau vendor_boot image. Modul-modul yang diperlukan di awal proses booting harus ada di vendor_boot . Ada biaya waktu boot yang terkait dengan memuat modul dari vendor_boot .