Proyek Gambar Kernel Generik (GKI)

Android Common Kernels (ACKs) adalah dasar untuk semua kernel produk Android. Vendor dan kernel perangkat berada di hilir ACK. Vendor menambahkan dukungan untuk SoC dan perangkat periferal dengan memodifikasi kode sumber kernel dan menambahkan driver perangkat. Modifikasi ini bisa sangat luas sampai-sampai 50% dari kode yang berjalan pada perangkat adalah kode out-of-tree dan bukan dari upstream Linux atau dari kernel umum AOSP.

Dengan demikian, kernel perangkat terdiri dari:

  • Hulu: Kernel Linux dari kernel.org
  • AOSP: Patch khusus Android tambahan dari kernel umum AOSP
  • Vendor: SoC dan pemberdayaan periferal dan patch pengoptimalan dari vendor
  • OEM/perangkat: Driver perangkat tambahan dan penyesuaian

Hampir setiap perangkat memiliki kernel khusus. Ini adalah fragmentasi kernel.

Hirarki kernel Android mengarah ke fragmentasi

Gambar 1. Hirarki kernel Android mengarah ke fragmentasi

Biaya fragmentasi

Fragmentasi kernel memiliki beberapa efek negatif pada komunitas Android.

Pembaruan keamanan bersifat padat karya

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

Sulit untuk menggabungkan pembaruan yang Didukung Jangka Panjang

Rilis yang Didukung Jangka Panjang (LTS) mencakup perbaikan keamanan dan perbaikan bug penting lainnya. Tetap up to date dengan rilis LTS telah terbukti menjadi cara paling efektif untuk memberikan perbaikan keamanan. Pada perangkat Pixel, ditemukan bahwa 90% dari masalah keamanan kernel yang dilaporkan di ASB telah diperbaiki untuk perangkat yang tetap up to date.

Namun, dengan semua modifikasi khusus di kernel perangkat, sulit untuk hanya 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 Kerja Android harus mengasumsikan bahwa sebanyak lima versi kernel didukung dan tidak ada perubahan kernel yang 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 mengkontribusikan perubahan kernel kembali ke Linux hulu

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 dikirimkan pada musim semi 2019.

Penundaan yang lama antara rilis kernel upstream dan produk mempersulit komunitas Android untuk memasukkan fitur dan driver yang dibutuhkan ke kernel upstream.

Memperbaiki fragmentasi: Gambar Kernel Generik

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

  • Kernel GKI dibangun 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 yang diberikan.
  • Kernel GKI tidak berisi kode khusus SoC atau khusus papan.

Untuk gambar arsitektur GKI, lihat ikhtisar Kernel .

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

Saat ini 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 T (AOSP eksperimental).
  • 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 (Android 11 dan rilis platform 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 untuk selalu memperbarui kernel mereka 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 memperkenalkan kinerja atau regresi daya yang signifikan saat mengganti kernel produk dengan kernel GKI.
  • Memungkinkan mitra untuk memberikan perbaikan keamanan kernel dan perbaikan bug tanpa keterlibatan vendor.
  • Kurangi biaya memperbarui 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 yang jelas untuk peningkatan.

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.