Ada dua jenis modul kernel: agnostik hardware Modul GKI dan khusus hardware modul vendor. Halaman ini memberikan ringkasan tentang kedua jenis modul.
Modul GKI
Modul image kernel generik (GKI) digunakan untuk mengirimkan kernel yang tidak diperlukan booting kemampuan yang terpisah dari {i> kernel<i} inti generik. Dengan modul GKI, Anda dapat memilih kemampuan {i>kernel<i} tertentu yang akan digunakan, sering kali mengurangi ukuran gambar {i>kernel<i} dan konsumsi memori runtime. Pengurangan ukuran membuat GKI sangat cocok untuk Perangkat Android Go dan faktor bentuk lainnya yang dibatasi resource.
Modul GKI juga menyediakan mekanisme untuk memungkinkan vendor menggabungkan fitur upstream setelah pencapaian pembekuan KMI. Kode bawaan tidak dapat diganti tanpa membuat gambar lain, sedangkan kode yang dikirimkan sebagai modul lain 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 diizinkan untuk dimuat asalkan hanya menggunakan simbol yang muncul di daftar yang diizinkan atau disediakan oleh modul 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 disampaikan oleh Google, tidak dibatasi dengan cara apa pun, dan berperilaku seolah-olah dibangun dengan {i>kernel<i} setelah dimuat. Selain itu, modul GKI yang dilindungi memiliki karakteristik berikut:
- Modul GKI yang dilindungi memiliki akses ke simbol {i>kernel<i} non-KMI yang tidak yang 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-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 GKI modul dianggap terlindungi pada saat pembekuan KMI.
Modul GKI tidak dilindungi
Modul GKI yang tidak dilindungi dapat diganti oleh modul vendor. Setelah {i>freeze <i}KMI, modul GKI yang dilindungi mungkin diklasifikasikan ulang sebagai tidak dilindungi jika memutuskan bahwa vendor perlu mengganti implementasi {i>default<i} dengan versi yang menyertakan fitur baru dari hulu Linux. Di berikutnya Rilis GKI, modul yang tidak dilindungi diklasifikasikan ulang sebagai terlindungi setelah kode upstream mendarat 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 sebagai vendor modul.
- Modul GKI yang tidak dilindungi tidak dapat mengekspor simbol yang diekspor oleh GKI yang dilindungi modul.
- Modul GKI yang tidak dilindungi harus menjaga antarmuka KMI seolah-olah merupakan bagian dari {i>kernel<i} inti.
- Modul GKI yang tidak dilindungi dapat diganti oleh modul vendor.
Modul vendor
Modul vendor disampaikan oleh partner untuk menerapkan SoC dan model perangkat kemampuan IT. Setiap modul {i>kernel<i} yang ada yang tidak dikirimkan sebagai bagian dari {i>Kernel<i} GKI dapat dikirimkan sebagai modul vendor.
Karena salah satu tujuan utama
dari proyek GKI adalah untuk meminimalkan
kode khusus perangkat keras dalam {i>kernel<i} inti, vendor
dapat mengharapkan bahwa GKI
{i>kernel<i} tidak akan menyertakan modul yang secara jelas
mengelola perangkat keras mereka sendiri. Sebagai
vendor ABC Inc. dapat
mengharapkan bahwa konfigurasi seperti
CONFIG_ABC_SOC_SUPPORT
tidak akan diaktifkan baik sebagai bawaan atau dapat dimuat
modul GKI tanpa dukungan mereka.
Jika {i>driver<i} atau kerangka kerja {i>kernel<i} ada di ACK, tetapi tidak dikirimkan sebagai bagian dari
{i>kernel<i} GKI, vendor dapat memodifikasi {i>driver<i}
dan mengirimkannya sebagai vendor
ruang lingkup modul ini. Modifikasi tersebut tidak disarankan untuk modul non-vendor yang spesifik
karena kemampuan yang sama mungkin
dikirimkan dengan {i>kernel<i} GKI di
rilis mendatang. Ketika {i>kernel<i} GKI memiliki kapabilitas yang disediakan vendor
modul vendor tidak akan dimuat. Misalnya,
CONFIG_GREYBUS
tidak ditetapkan untuk GKI di Android 11, jadi
vendor dapat mengirimkan modul vendor greybus. Namun, CONFIG_GREYBUS
mungkin
diaktifkan sebagai modul bawaan atau modul GKI di Android 12, di
dalam hal ini modul vendor
greybus tidak akan dimuat. Praktik terbaik adalah menggunakan
versi hulu dari {i>driver<i} tidak khusus
vendor jika mereka dikirim sebagai
modul vendor.
Anda dapat mengirimkan modul vendor di vendor
atau
vendor_boot
gambar. Modul yang diperlukan di awal proses booting harus berada di vendor_boot
.
Ada biaya waktu booting yang terkait dengan modul pemuatan dari vendor_boot
.