Kernel umum Android

Kernel umum AOSP (juga dikenal sebagai kernel umum atau ACK Android) adalah downstream dari kernel kernel.org dan menyertakan patch yang menarik bagi komunitas Android yang belum digabungkan ke dalam kernel mainline atau LTS yang Didukung Jangka Panjang (LTS). Patch ini dapat mencakup:

  • Backport dan pilihan terbaik fungsi upstream yang diperlukan untuk fitur Android
  • Fitur siap untuk perangkat Android tetapi masih dalam pengembangan upstream
  • Fitur Vendor/OEM yang berguna untuk partner ekosistem lainnya

android-mainline adalah cabang pengembangan utama untuk fitur Android. Alur utama Linux digabungkan ke android-mainline setiap kali Linus Torvalds memposting kandidat rilis atau rilis. Sebelum 2019, kernel umum Android dibuat dengan meng-clone kernel LTS yang baru dideklarasikan dan menambahkan patch khusus Android. Proses ini diubah pada tahun 2019 untuk mencabangkan kernel umum Android baru dari android-mainline. Model baru ini menghindari upaya yang signifikan untuk meneruskan port dan menguji patch Android dengan mencapai hasil yang sama secara bertahap. android-mainline menjalani pengujian berkelanjutan yang signifikan, model ini memastikan kernel berkualitas tinggi sejak dipublikasikan.

Jika LTS baru dideklarasikan ke upstream, kernel umum yang sesuai akan bercabang dari android-mainline. Hal ini memungkinkan partner memulai project sebelum deklarasi versi LTS, dengan menggabungkan dari android-mainline. Setelah cabang kernel umum yang baru dibuat, partner dapat mengubah sumber gabungan ke cabang baru dengan lancar.

Cabang kernel umum lainnya menerima penggabungan reguler dari kernel LTS terkait. Penggabungan ini biasanya dilakukan segera setelah rilis LTS diposting. Misalnya, saat Linux 6.1.75 diposting, Linux 6.1 tersebut digabungkan ke kernel umum 6.1 (android14-6.1). Partner sangat dianjurkan untuk mengupdate kernelnya agar terus mendapatkan update terbaru dengan LTS dan perbaikan bug khusus Android.

Cabang kernel ACK KMI

Kernel GKI memiliki Antarmuka Modul Kernel yang stabil. KMI secara unik diidentifikasi oleh versi kernel dan rilis platform Android, sehingga cabang diberi nama ANDROID_RELEASE-KERNEL_VERSION. Misalnya, kernel 6.1 GKI untuk Android 14 diberi nama android14-6.1. Untuk Android 15 (eksperimental AOSP), kernel GKI android15-6.6 diperkenalkan.

Menampilkan dan meluncurkan kernel

Sebelum Android 15 (eksperimental AOSP), salah satu dari tiga kernel terbaru dapat digunakan untuk peluncuran perangkat. Mulai Android 15 (eksperimental AOSP), dua versi kernel terbaru dapat digunakan untuk peluncuran perangkat. Kernel peluncuran untuk Android 15 (eksperimental AOSP) adalah android15-6.6 dan android14-6.1.

Karena upgrade kernel tidak diperlukan saat mengupdate rilis platform, kernel yang tidak memiliki fitur terbaru untuk rilis platform masih dapat digunakan untuk meluncurkan perangkat. Oleh karena itu, kernel yang didesain untuk Android 14, seperti android14-6.1, dapat digunakan pada perangkat bahkan setelah mengupgrade rilis platform ke Android 15 (eksperimental AOSP).

Rilis platform Android Meluncurkan kernel Kernel fitur
Android 15 (Eksperimental AOSP) (2024) android15-6.6
android14-6.1
android15-6.6
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.101
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.101
android12-5.41
android11-5.41
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.41
android-4.19-stable
android12-5.10
android12-5.4
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

1 Pembatasan tambahan mungkin berlaku jika BSP terkait telah diupdate untuk rilis platform. Secara lebih umum, nomor Rilis Android kernel harus lebih tinggi dari atau sama dengan versi FCM target. Lihat Objek Antarmuka Vendor - cocokkan cabang kernel untuk detailnya.

Hierarki kernel umum

Cabang dari android-mainline

Tingkat atas hierarki {i>kernel<i} umum ditunjukkan pada Gambar 1.

Membuat kernel umum dari kernel Android-mainline

Gambar 1. Membuat kernel umum dari kernel Android-mainline

Perhatikan bahwa kernel umum Android yang baru, android14-6.1, bercabang dari android-mainline pada tahun 2022. Pada tahun 2023, saat LTS berikutnya dideklarasikan, android15-6.6 dicabangkan dari android-mainline.

Seperti ditunjukkan dalam Gambar 1, setiap versi {i>kernel<i} dapat menjadi dasar untuk dua {i>kernel<i} GKI. Misalnya, dua kernel v5.15 adalah android13-5.15 dan android14-5.15, keduanya merupakan kernel fitur untuk rilis platform masing-masing. Hal ini juga berlaku untuk 5.10; android12-5.10 dibuat saat LTS dideklarasikan dan android13-5.10 bercabang dari android12-5.10 pada tonggak pencapaian lengkap fitur kernel pada Musim Semi 2021 guna memungkinkan pengembangan fitur untuk Android 13. Mulai Android 15 (eksperimental AOSP) (2024), hanya ada satu kernel GKI baru per versi kernel (tidak ada kernel android15-6.1).

Siklus proses cabang ACK KMI

Siklus proses cabang ACK KMI ditunjukkan di bawah ini pada Gambar 2.

6.6 Siklus proses cabang ACK KMI

Gambar 2. 6.6 Siklus proses cabang ACK KMI

Untuk memperjelas proses pengembangan dan siklus proses cabang, Gambar 2 berfokus pada cabang ACK KMI untuk 6.6.

Setiap cabang ACK KMI siklus melalui tiga fase yang ditunjukkan pada Gambar 2 dengan warna yang berbeda di setiap cabang. Seperti yang ditunjukkan, LTS digabungkan secara berkala terlepas dari fasenya.

Fase pengembangan

Saat dibuat, cabang ACK KMI memasuki fase pengembangan (dilabeli sebagai dev pada Gambar 2), dan terbuka untuk menerima kontribusi fitur untuk rilis platform Android berikutnya. Pada Gambar 2, android15-6.6 dibuat saat 6.6 dideklarasikan sebagai kernel LTS upstream baru.

Fase stabilisasi

Setelah cabang ACK KMI dideklarasikan, fitur akan memasuki fase stabilisasi (diberi label stabil pada Gambar 2). Fitur partner dan perbaikan bug masih diterima, tetapi pelacakan KMI diaktifkan untuk mendeteksi perubahan yang memengaruhi antarmuka. Pada fase ini, perubahan yang menyebabkan gangguan KMI diterima dan definisi KMI diperbarui sesuai ritme yang telah ditentukan (biasanya setiap dua minggu). Lihat ringkasan GKI untuk mengetahui detail tentang pemantauan KMI.

Fase pembekuan KMI

Sebelum rilis platform baru didorong ke AOSP, cabang ACK KMI akan dibekukan dan tetap dibekukan selama masa pakai cabang. Artinya, tidak ada perubahan yang dapat menyebabkan gangguan KMI kecuali jika ada masalah keamanan serius yang teridentifikasi yang tidak dapat dimitigasi tanpa memengaruhi KMI yang stabil. Untuk menghindari kerusakan KMI, beberapa patch yang digabungkan dari LTS mungkin diubah atau dihapus jika perbaikan tidak diperlukan untuk perangkat Android.

Saat cabang ACK KMI dibekukan, perbaikan bug dan fitur partner dapat diterima selama kernel umum KMI yang ada tidak rusak. KMI dapat diperpanjang dengan simbol baru yang diekspor selama antarmuka yang terdiri dari KMI saat ini tidak terpengaruh. Ketika ditambahkan ke KMI, antarmuka baru akan langsung menjadi stabil dan tidak dapat rusak oleh perubahan di masa mendatang.

Misalnya, perubahan yang menambahkan kolom ke struktur yang digunakan oleh kernel umum antarmuka KMI tidak diizinkan karena mengubah definisi antarmuka:

struct foo {
  int original_field1;
  int original_field2;
  int new_field;  // Not allowed
};

int do_foo(struct foo &myarg)
{
  do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);

Namun, menambahkan fungsi baru tidak masalah:

struct foo2 {
  struct foo orig_foo;
  int new_field;
};

int do_foo2(struct foo2 &myarg)
{
  do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);

Selama masa pakai kernel GKI, kompatibilitas mundur dengan userspace dipertahankan sehingga kernel dapat digunakan dengan aman untuk rilis platform Android yang digunakan untuk meluncurkan perangkat. Pengujian berkelanjutan dengan rilis sebelumnya memastikan kompatibilitas tetap dipertahankan. Jadi dalam Gambar 2, kernel android15-6.6 dapat digunakan untuk perangkat Android 15 (eksperimental AOSP) dan perangkat yang lebih baru. Karena rilis platform Android juga kompatibel dengan versi sebelumnya, kernel android14-6.1 dapat digunakan untuk perangkat Android 15 (eksperimental AOSP) baik untuk peluncuran maupun upgrade.

Nomor pembuatan KMI

Jika ada penggabungan LTS selama fase stabilisasi atau masalah keamanan atau peristiwa lain setelahnya yang memerlukan penerimaan patch yang mengubah KMI, nomor pembuatan KMI yang direkam di build.config.common akan bertambah. Generasi KMI saat ini dapat ditemukan menggunakan perintah uname:

$ uname -r
6.6.30-android15-6-g86d10b30f51f

Angka setelah rilis platform adalah pembuatan KMI (dalam hal ini 6).

Jika pembuatan KMI berubah, kernel tidak kompatibel dengan modul vendor yang sesuai dengan generasi KMI sebelumnya, sehingga modul harus dibangun ulang dan diupdate secara sinkron dengan kernel. Setelah pembekuan KMI, perubahan pembuatan KMI diperkirakan akan sangat jarang terjadi.

Kompatibilitas antar-kernel

Persyaratan kompatibilitas antar-kernel dalam kelompok LTS yang sama berubah mulai dengan kernel GKI yang baru.

Kernel GKI

Kernel GKI mempertahankan kompatibilitas mundur dengan semua rilis platform Android yang mendukung versi kernel. Selain itu, rilis platform Android kompatibel dengan kernel GKI dari rilis sebelumnya. Jadi Anda dapat dengan aman menggunakan kernel android14-6.1 yang dikembangkan untuk Android 14 (2023) di perangkat yang menjalankan Android 15 (eksperimental AOSP) (2024). Kompatibilitas diverifikasi melalui pengujian VTS dan CTS yang berkelanjutan dari kernel GKI dengan semua rilis yang didukung.

KMI stabil sehingga kernel dapat diupdate tanpa memerlukan build ulang modul kernel di image vendor.

Kompatibilitas KMI tidak dipertahankan di antara {i>kernel<i} GKI yang berbeda. Jadi, misalnya, kernel android14-6.1 tidak dapat diganti dengan kernel android15-6.6 tanpa mem-build ulang semua modul.

Kernel GKI hanya didukung untuk rilis awal dan selanjutnya. Fitur tersebut tidak didukung untuk rilis lama. Jadi, kernel android15-6.6 tidak didukung untuk perangkat yang menjalankan Android 14 (2023).

Matriks kompatibilitas

Tabel ini menunjukkan versi kernel yang didukung dan diuji dengan setiap rilis platform Android.

Rilis platform Android Kernel yang didukung untuk upgrade Kernel yang didukung untuk peluncuran
Android 15 (Eksperimental AOSP) (2024) android15-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android15-6.6
android14-6.1
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4
android-4.19-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 11 (2020) android11-5.4
android-4.19-stable
android11-5.4
android-4.19-stable

Mendukung masa aktif dan patch keamanan

Kernel umum Android didukung hingga kernel LTS atau rilis Platform Android yang terkait tidak lagi didukung. Meskipun didukung, kernel akan terus menerima penggabungan LTS dari upstream dan perbaikan bug untuk kode khusus Android. Perbaikan ini mencakup semua patch keamanan kernel yang dikutip dalam Android Security Buletin bulanan yang relevan dengan kernel umum Android.

Partner dapat merasa yakin bahwa dengan menggunakan kernel GKI, mereka mendapatkan semua patch keamanan kernel yang dimungkinkan.

Pengujian kernel umum

Kernel umum diuji dengan beberapa sistem CI selain pengujian downstream oleh vendor.

Uji Fungsional Kernel Linux

Pengujian Fungsional Kernel Linux (LKFT) memulai berbagai rangkaian pengujian, termasuk kselftest, LTP, VTS, dan CTS pada serangkaian perangkat arm32 dan arm64 fisik. Hasil pengujian terbaru dapat ditemukan di sini.

Pengujian KernelCI

Pengujian build dan booting KernelCI dimulai setiap kali patch baru di-commit ke cabang kernel umum. Beberapa ratusan konfigurasi build diuji dan di-booting di berbagai board. Hasil terbaru untuk kernel Android dapat ditemukan di sini.

Pengujian pra-pengiriman dan pasca-pengiriman Android

Pengujian pra-pengiriman digunakan untuk mencegah kegagalan diperkenalkan ke kernel umum Android. Ringkasan hasil pengujian dapat ditemukan di tab 'Pemeriksaan' pada perubahan kode di gerrit kernel umum Android.

Pengujian pasca-pengiriman Android dilakukan pada build baru yang dipublikasikan di cabang kernel umum Android ketika patch baru di-commit ke cabang kernel umum Android di ci.android.com. Dengan memasukkan aosp_kernel sebagai nama cabang parsial di ci.android.com, Anda akan melihat daftar cabang kernel dengan hasil yang tersedia. Misalnya, hasil untuk android-mainline dapat ditemukan di sini. Saat mengklik build tertentu, Anda akan menemukan status pengujian di tab Test Results.

Pengujian yang ditentukan oleh pemetaan pengujian dengan grup pengujian kernel-presubmit di hierarki sumber platform Android akan dijalankan sebagai prapengiriman untuk cabang kernel Android. Misalnya, konfigurasi berikut dalam test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING akan mengaktifkan vts_kernel_proc_file_api_test sebagai pengujian presbumit pada check-in kode kernel umum Android.

{
  "kernel-presubmit": [
    {
      "name": "vts_kernel_proc_file_api_test"
    }
  ]
}

Pengujian 0 hari

Pengujian 0-day melakukan pengujian patch-by-patch pada semua cabang kernel umum Android saat patch baru di-commit. Berbagai pengujian booting, fungsional, dan performa dijalankan. Bergabung dengan grup publik cros-kernel-buildreports

Matriks uji

Kernel umum Android Rilis Platform Android Suite Pengujian
Utama 15 14 13 12 11 10 LKFT {i>KernelCI<i} Pra-Kirim Kirim Postingan 0-day
android-mainline
android5-6.6
android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android-4.19-stable

Berkontribusi pada kernel umum Android

Umumnya, pengembangan fitur harus dilakukan di Linux mainline dan bukan di kernel umum Android. Pengembangan upstream sangat dianjurkan, dan setelah pengembangan diterima di sana, pengembangan dapat di-backport dengan mudah ke cabang ACK tertentu sesuai kebutuhan. Tim Kernel Android dengan senang hati mendukung upaya upstreaming untuk kepentingan ekosistem Android.

Kirimkan patch ke Gerrit dan mematuhi panduan kontribusi ini.