Project Generic Kernel Image (GKI)

Kernel produk, juga dikenal sebagai kernel perangkat atau kernel OEM, adalah yang dikirimkan di perangkat Anda. Sebelum GKI, {i>kernel<i} produk berasal dari serangkaian perubahan {i>kernel<i} upstream. Gambar 1 menunjukkan bagaimana {i>kernel<i} tambahan menghasilkan {i>kernel<i} produk ({i>kernel<i} perangkat/OEM):

Konstruksi kernel produk pra-GKI

Gambar 1. Konstruksi kernel produk pra-GKI.

  1. Kernel Linux Jangka Panjang yang Didukung (LTS) dari kernel.org telah diubah dengan patch khusus Android yang menghasilkan Android Common Kernel (ACK).
  2. ACK dimodifikasi oleh vendor yang menambahkan dukungan untuk sistem di chip mereka (SoC). Vendor ini juga dapat menambahkan pengoptimalan performa atau daya. Tujuan yang dihasilkan disebut kernel vendor.
  3. Akhirnya, {i>kernel<i} vendor dimodifikasi lebih lanjut oleh OEM dengan {i>driver <i}perangkat dan penyesuaian yang mereka anggap perlu. {i>Kernel<i} yang dihasilkan disebut kernel produk.

Semua perubahan ini dapat menghasilkan sebanyak 50% kode {i>kernel<i} menjadi kode {i>out-of-tree<i} dan bukan dari kernel Linux atau ACK upstream. Sebelum GKI, hampir setiap perangkat memiliki {i>kernel<i} khusus yang menghasilkan {i>kernel<i} fragmentasi.

Biaya fragmentasi

Fragmentasi kernel memiliki beberapa efek negatif terhadap komunitas Android.

Update keamanan memerlukan banyak tenaga

Patch keamanan yang dikutip dalam Buletin Keamanan Android (ASB) harus di-backport ke setiap {i>kernel<i} perangkat. Namun, karena {i>kernel<i} fragmentasi, penyebaran perbaikan keamanan ke perangkat Android di lapangan.

Sulit menggabungkan update yang Didukung Jangka Panjang

Rilis Jangka Panjang yang Didukung (LTS) mencakup perbaikan keamanan dan perbaikan {i>bug<i} penting. Mengikuti perkembangan rilis LTS telah terbukti menjadi cara yang paling efektif untuk memberikan perbaikan keamanan. Di perangkat Pixel, menemukan bahwa 90% dari masalah keamanan {i>kernel<i} yang dilaporkan di ASB telah telah diperbaiki untuk perangkat yang selalu diperbarui.

Namun, dengan semua modifikasi khusus di {i>kernel<i} perangkat, sulit untuk menggabungkan perbaikan LTS ke dalam {i>kernel<i} perangkat.

Menghambat upgrade rilis platform Android

Fragmentasi mempersulit fitur Android baru yang membutuhkan kernel perubahan yang akan ditambahkan ke perangkat di lapangan. Kode Framework Android harus mengasumsikan bahwa hingga lima versi {i>kernel<i} didukung dan tidak ada perubahan {i>kernel<i} dibuat untuk rilis platform baru (Android 10 mendukung kernel 3.18, 4.4, 4.9, 4.14, dan 4.19, yang dalam beberapa kasus belum ditingkatkan dengan fitur baru sejak Android 8 pada 2017).

Sulit untuk mengontribusikan perubahan kernel kembali ke Linux upstream

Dengan semua perubahan yang dilakukan pada {i>kernel<i}, sebagian besar perangkat unggulan dengan versi {i>kernel<i} yang sudah berusia setidaknya 18 bulan. Misalnya, {i>Kernel<i} 4.14 dirilis oleh kernel.org pada bulan November 2017 dan ponsel Android pertama yang menggunakan kernel 4.14, dikirimkan pada musim semi 2019.

Keterlambatan yang lama antara rilis {i> kernel<i} upstream dan produk membuatnya sulit bagi komunitas Android untuk memasukkan fitur dan driver yang dibutuhkan ke upstream {i>kernel<i}.

Memperbaiki fragmentasi: Image Kernel Generik

Project Kernel Image (GKI) menangani fragmentasi kernel dengan menyatukan {i>kernel<i} inti dan memindahkan dukungan SoC dan board dari {i>kernel<i} inti menjadi modul vendor yang dapat dimuat. GKI juga menyajikan Modul Kernel stabil Antarmuka (KMI) untuk modul vendor, sehingga modul dan kernel dapat diupdate mereka dapat bekerja secara mandiri. Beberapa karakteristik dari {i>kernel<i} GKI adalah:

  • Kernel GKI dibangun dari sumber ACK.
  • {i>Kernel<i} GKI adalah biner {i>kernel<i} tunggal ditambah modul terkait yang dapat dimuat per arsitektur, per rilis LTS (saat ini hanya arm64 untuk android11-5.4 dan android12-5.4).
  • Kernel GKI diuji dengan semua rilis Platform Android yang didukung untuk ACK terkait. Tidak ada penghentian fitur selama masa aktif GKI {i>kernel<i}.
  • Kernel GKI mengekspos KMI yang stabil ke driver yang ada dalam LTS tertentu.
  • {i>Kernel<i} GKI tidak berisi kode khusus SoC atau {i>board-specific<i}.

Untuk mengetahui gambar arsitektur GKI, lihat Ringkasan Kernel.

GKI adalah perubahan kompleks yang diluncurkan dalam beberapa tahap dimulai dengan kernel v5.4 dalam rilis platform Android 11.

Ada dua tahapan GKI:

  • GKI 1.0 diperkenalkan di Android 11 untuk perangkat dengan 5.4 kernel. GKI 1.0 berlaku untuk semua perangkat yang dikirimkan dengan {i>kernel<i} 5.4, bahkan yang diluncurkan dengan Android 12 atau Android 13.
  • GKI 2.0 diperkenalkan di Android 12 untuk perangkat dengan 5.10 kernel dan merupakan standar baru untuk semua perangkat yang dikirimkan dengan versi 5.10 atau {i>kernel<i} berikutnya.

GKI 1.0

Di GKI 1.0, perangkat yang diluncurkan dengan kernel versi 5.4 harus lulus pengujian GKI (Rilis platform Android 11 dan yang lebih baru). Sasaran GKI 1.0 mencakup hal berikut:

  • Hindari regresi di Vendor Test Suite (VTS) atau Compatibility Test Suite (CTS) ketika mengganti {i>kernel<i} produk dengan {i>kernel<i} GKI.
  • Mengurangi beban partner dalam mengupdate kernel dengan AOSP {i>kernel<i} yang umum digunakan.
  • Menyertakan perubahan inti Android dalam kernel untuk upgrade dan peluncuran perangkat dengan rilis Android baru.
  • Jangan merusak ruang pengguna Android.
  • Memisahkan komponen khusus hardware dari kernel inti sebagai modul yang dapat dimuat.

Untuk dokumentasi GKI 1.0, lihat Bagian GKI 1.0.

GKI 2.0

Di GKI 2.0, perangkat yang diluncurkan dengan {i>kernel<i} versi 5.10 atau yang lebih tinggi harus dikirimkan dengan kernel GKI (dimulai dengan Android 12). Booting yang ditandatangani gambar tersedia dan diperbarui secara rutin dengan LTS dan perbaikan bug penting. Karena stabilitas biner dipertahankan untuk KMI, Anda dapat menginstal proses {i>booting<i} ini gambar tanpa mengubah gambar vendor. Sasaran GKI 2.0 mencakup berikut ini:

  • Jangan menyebabkan performa atau regresi daya yang signifikan saat mengganti {i>kernel<i} produk dengan {i>kernel<i} GKI.
  • Memungkinkan partner untuk memberikan perbaikan keamanan kernel dan perbaikan bug tanpa memerlukan vendor keterlibatan tim.
  • Mengurangi biaya update versi kernel utama untuk perangkat (misalnya, dari v5.10 ke kernel LTS 2021).
  • Mempertahankan biner kernel GKI tunggal per arsitektur dengan mengupdate kernel versi baru dengan proses upgrade yang jelas.

GKI 2.0 mewakili status terbaru kernel Android. Kernel dokumentasi di luar GKI 1.0 dan Kernel sebelumnya (<=4,19) mencerminkan arsitektur GKI 2.0.