Project Generic Kernel Image (GKI)

Kernel produk, yang juga dikenal sebagai kernel perangkat atau kernel OEM, adalah kernel yang Anda kirimkan di perangkat. Sebelum GKI, kernel produk berasal dari serangkaian perubahan kernel upstream. Gambar 1 menunjukkan cara penambahan kernel menghasilkan kernel produk (OEM/kernel perangkat):

Konstruksi kernel produk pra-GKI

Gambar 1. Konstruksi kernel produk pra-GKI.

  1. Kernel Linux Long Term Supported (LTS) dari kernel.org dimodifikasi dengan patch khusus Android yang menghasilkan Android Common Kernel (ACK).
  2. ACK dimodifikasi oleh vendor yang menambahkan dukungan untuk system-on-a-chip (SoC) mereka. Vendor juga dapat menambahkan pengoptimalan performa atau daya. Kernel yang dihasilkan disebut kernel vendor.
  3. Terakhir, kernel vendor dimodifikasi lebih lanjut oleh OEM dengan driver perangkat tambahan dan penyesuaian yang mereka anggap perlu. Kernel yang dihasilkan disebut kernel produk.

Semua modifikasi ini dapat menyebabkan hingga 50% kode kernel menjadi kode out-of-tree dan bukan dari kernel Linux upstream atau ACK. Sebelum GKI, hampir setiap perangkat memiliki kernel kustom yang menghasilkan fragmentasi kernel.

Biaya fragmentasi

Fragmentasi kernel memiliki beberapa efek negatif terhadap komunitas Android.

Update keamanan memerlukan banyak tenaga

Patch keamanan yang dikutip dalam Android Security Bulletin (ASB) harus di-backport ke setiap kernel perangkat. Namun, karena fragmentasi kernel, penyebaran perbaikan keamanan ke perangkat Android di lapangan sangat mahal.

Sulit menggabungkan update yang Didukung Jangka Panjang

Rilis Dukungan Jangka Panjang (LTS) mencakup perbaikan keamanan dan perbaikan bug kritis lainnya. Mendapatkan info terbaru terkait rilis LTS telah terbukti menjadi cara paling efektif untuk memberikan perbaikan keamanan. Pada perangkat Pixel, ditemukan bahwa 90% masalah keamanan kernel yang dilaporkan di ASB telah diperbaiki untuk perangkat yang selalu diupdate.

Namun, dengan semua modifikasi kustom di kernel perangkat, sulit untuk menggabungkan perbaikan LTS ke dalam kernel perangkat.

Menghambat upgrade rilis platform Android

Fragmentasi mempersulit fitur Android baru yang memerlukan perubahan kernel untuk ditambahkan ke perangkat di lapangan. Kode Framework Android harus mengasumsikan bahwa sebanyak lima versi kernel didukung dan tidak ada perubahan kernel yang dilakukan 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 berkontribusi pada perubahan kernel kembali ke Linux upstream

Dengan semua perubahan yang dilakukan pada kernel, sebagian besar perangkat unggulan dikirimkan dengan versi kernel yang sudah berusia minimal 18 bulan. Misalnya, kernel 4.14 dirilis oleh kernel.org pada November 2017 dan ponsel Android pertama yang menggunakan kernel 4.14 dikirim pada musim semi 2019.

Penundaan yang lama antara rilis kernel upstream dan produk ini menyulitkan komunitas Android untuk memasukkan fitur dan driver yang diperlukan ke kernel upstream.

Memperbaiki fragmentasi: Gambar Kernel Generik

Project Generic Kernel Image (GKI) mengatasi fragmentasi kernel dengan menyatukan kernel inti dan memindahkan dukungan SoC dan board dari kernel inti ke modul vendor yang dapat dimuat. GKI juga menghadirkan Antarmuka Modul Kernel (KMI) yang stabil untuk modul vendor, sehingga modul dan kernel dapat diupdate secara independen. Beberapa karakteristik kernel GKI adalah:

  • Kernel GKI dibuat dari sumber ACK.
  • Kernel GKI adalah biner kernel tunggal plus modul yang dapat dimuat terkait 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 penggunaan fitur selama masa aktif versi kernel GKI.
  • Kernel GKI mengekspos KMI stabil ke driver dalam LTS tertentu.
  • Kernel GKI tidak berisi kode khusus SoC atau khusus board.

Untuk 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 tahap GKI:

  • GKI 1.0 diperkenalkan di Android 11 untuk perangkat dengan kernel 5.4. GKI 1.0 berlaku untuk semua perangkat yang dikirimkan dengan kernel 5.4, bahkan yang diluncurkan dengan Android 12 atau Android 13.
  • GKI 2.0 diperkenalkan di Android 12 untuk perangkat dengan kernel 5.10 dan merupakan standar baru untuk semua perangkat yang dilengkapi dengan kernel 5.10 atau yang lebih baru.

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) saat mengganti kernel produk dengan kernel GKI.
  • Mengurangi beban partner untuk terus mengupdate kernel mereka dengan kernel umum AOSP.
  • Menyertakan perubahan Android inti dalam kernel untuk perangkat yang diupgrade dan diluncurkan 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 kernel versi 5.10 atau yang lebih tinggi harus dikirim dengan kernel GKI (dimulai dengan Android 12). Image booting yang ditandatangani tersedia dan diupdate secara rutin dengan LTS dan perbaikan bug penting. Karena stabilitas biner dipertahankan untuk KMI, Anda dapat menginstal image booting ini tanpa melakukan perubahan pada image vendor. Sasaran GKI 2.0 mencakup hal berikut:

  • Jangan perkenalkan regresi performa atau daya yang signifikan saat mengganti kernel produk dengan kernel GKI.
  • Memungkinkan partner mengirimkan perbaikan keamanan kernel dan perbaikan bug tanpa partisipasi vendor.
  • Mengurangi biaya update versi kernel utama untuk perangkat (misalnya, dari v5.10 ke kernel LTS 2021).
  • Pertahankan biner kernel GKI tunggal per arsitektur dengan mengupdate versi kernel dengan proses yang jelas untuk upgrade.

GKI 2.0 mewakili status kernel Android terbaru. Dokumentasi kernel di luar subbagian GKI 1.0 dan Kernel sebelumnya (<=4.19) mencerminkan arsitektur GKI 2.0.