Proyek Gambar Kernel Generik (GKI).

Kernel produk , juga dikenal sebagai kernel perangkat atau kernel OEM , adalah kernel yang dikirimkan ke perangkat Anda. Sebelum GKI, kernel produk diturunkan dari serangkaian perubahan kernel upstream. Gambar 1 menunjukkan bagaimana 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 telah dimodifikasi dengan patch khusus Android yang menghasilkan Android Common Kernel (ACK) .
  2. ACK telah dimodifikasi oleh vendor yang menambahkan dukungan untuk System-on-a-Chip (SoC) mereka. Vendor mungkin juga menambahkan optimalisasi kinerja 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 mengakibatkan hingga 50% kode kernel menjadi kode out-of-tree dan bukan berasal dari kernel Linux upstream atau ACK. Sebelum adanya GKI, hampir setiap perangkat memiliki kernel khusus yang mengakibatkan fragmentasi kernel.

Biaya fragmentasi

Fragmentasi kernel mempunyai beberapa dampak negatif pada komunitas Android.

Pembaruan keamanan membutuhkan banyak tenaga kerja

Patch keamanan yang disebutkan dalam Buletin Keamanan Android (ASB) harus di-backport ke setiap kernel perangkat. Namun, karena fragmentasi kernel, menerapkan perbaikan keamanan pada perangkat Android di lapangan menjadi sangat mahal.

Sulit untuk menggabungkan pembaruan yang Didukung Jangka Panjang

Rilisan yang Didukung Jangka Panjang (LTS) mencakup perbaikan keamanan dan perbaikan bug penting lainnya. Mengikuti perkembangan 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 diperbarui.

Namun, dengan semua modifikasi khusus pada kernel perangkat, sulit untuk menggabungkan perbaikan LTS ke dalam kernel perangkat.

Menghambat peningkatan rilis platform Android

Fragmentasi mempersulit fitur Android baru yang memerlukan perubahan kernel untuk ditambahkan ke perangkat di lapangan. Kode Kerangka Android harus berasumsi 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 didukung. ditingkatkan dengan fitur-fitur baru sejak Android 8 pada tahun 2017).

Sulit untuk mengkontribusikan perubahan kernel kembali ke Linux upstream

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

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

Memperbaiki fragmentasi: Gambar Kernel Generik

Proyek Generic Kernel Image (GKI) mengatasi fragmentasi kernel dengan menyatukan kernel inti dan memindahkan SoC serta dukungan board dari kernel inti ke dalam modul vendor yang dapat dimuat. GKI juga menghadirkan Kernel Module Interface (KMI) yang stabil untuk modul vendor, sehingga modul dan kernel dapat diupdate secara mandiri. Beberapa karakteristik kernel GKI adalah:

  • Kernel GKI dibuat dari sumber ACK.
  • Kernel GKI adalah biner kernel 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 pakai versi kernel GKI.
  • Kernel GKI memaparkan KMI yang stabil ke driver dalam LTS tertentu.
  • Kernel GKI tidak berisi kode khusus SoC atau kode khusus board.

Untuk gambaran arsitektur GKI, lihat gambaran umum Kernel .

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

Saat ini terdapat dua tahapan 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 perangkat 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 dikirimkan dengan kernel 5.10 atau 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 antara lain sebagai berikut:

  • Hindari regresi di Vendor Test Suite (VTS) atau Compatibility Test Suite (CTS) saat mengganti kernel produk dengan kernel GKI.
  • Kurangi beban mitra dalam menjaga kernel mereka tetap mutakhir dengan kernel umum AOSP.
  • Sertakan perubahan inti Android dalam kernel untuk peningkatan dan peluncuran perangkat dengan rilis Android baru.
  • Jangan merusak ruang pengguna Android.
  • Pisahkan komponen khusus perangkat keras 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 lebih tinggi harus dikirimkan dengan kernel GKI (dimulai dengan Android 12). Gambar boot yang ditandatangani tersedia dan diperbarui secara berkala dengan LTS dan perbaikan bug penting. Karena stabilitas biner dipertahankan untuk KMI, Anda dapat menginstal image boot ini tanpa membuat perubahan pada image vendor. Tujuan GKI 2.0 antara lain sebagai berikut:

  • Jangan menyebabkan regresi performa atau daya yang signifikan saat mengganti kernel produk dengan kernel GKI.
  • Memungkinkan mitra untuk memberikan perbaikan keamanan kernel dan perbaikan bug tanpa keterlibatan vendor.
  • Mengurangi biaya pembaruan versi kernel utama untuk perangkat (misalnya, dari v5.10 ke kernel LTS 2021).
  • Pertahankan satu biner kernel GKI per arsitektur dengan memperbarui versi kernel dengan proses peningkatan yang jelas.

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