Ringkasan modul kernel

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.