Kernel umum Android

Kernel umum AOSP (juga dikenal sebagai kernel umum Android atau ACK) adalah downstream kernel kernel.org dan menyertakan patch yang menarik bagi komunitas Android yang belum digabungkan ke dalam kernel utama atau Long Term Supported (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. Mainline Linux digabungkan ke android-mainline setiap kali Linus Torvalds memposting rilis atau kandidat rilis. Sebelum tahun 2019, kernel umum Android dibuat dengan meng-clone kernel LTS yang baru saja dideklarasikan dan menambahkan patch khusus Android. Proses ini berubah pada tahun 2019 untuk membuat cabang kernel umum Android baru dari android-mainline. Model baru ini menghindari upaya 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 hari pertama dipublikasikan.

Saat LTS baru dideklarasikan di 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 baru dibuat, partner dapat mengubah sumber penggabungan 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, kernel tersebut digabungkan ke kernel umum 6.1 (android14-6.1). Partner sangat dianjurkan untuk mengupdate kernel mereka agar tetap mendapatkan LTS dan perbaikan bug khusus Android.

Cabang kernel ACK KMI

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

Menampilkan dan meluncurkan kernel

Sebelum Android 15, salah satu dari tiga kernel terbaru dapat digunakan untuk peluncuran perangkat. Mulai Android 15, dua versi kernel terbaru dapat digunakan untuk peluncuran perangkat. Kernel peluncuran untuk Android 15 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 dirancang untuk Android 14, seperti android14-6.1, dapat digunakan di perangkat bahkan setelah mengupgrade rilis platform ke Android 15.

Rilis platform Android Meluncurkan kernel Kernel fitur
Android 15 (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.10
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4
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 Batasan tambahan mungkin berlaku jika BSP terkait telah diperbarui untuk rilis platform. Secara lebih umum, nomor Rilis Android kernel harus lebih tinggi atau sama dengan versi FCM target. Lihat Objek Antarmuka Vendor - mencocokkan cabang kernel untuk mengetahui detailnya.

Hierarki kernel umum

Cabang dari android-mainline

Tingkat teratas hierarki kernel umum ditunjukkan dalam Gambar 1.

Membuat kernel umum dari kernel android-mainline

Gambar 1. Membuat kernel umum dari kernel Android-mainline

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

Seperti yang ditunjukkan pada Gambar 1, setiap versi kernel dapat menjadi dasar untuk dua kernel GKI. Misalnya, dua kernel v5.15 adalah android13-5.15 dan android14-5.15, yang keduanya adalah 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 untuk memungkinkan pengembangan fitur untuk Android 13. Mulai Android 15 (2024), hanya ada satu kernel GKI baru per versi kernel (tidak ada kernel android15-6.1).

Siklus proses cabang ACK KMI

Siklus proses cabang KMI ACK ditampilkan di bawah pada Gambar 2.

6.6 Siklus proses cabang ACK KMI

Gambar 2. Siklus proses cabang ACK KMI 6.6

Untuk memperjelas proses pengembangan dan siklus proses cabang, Gambar 2 berfokus pada cabang KMI ACK 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 KMI ACK akan memasuki fase pengembangan (diberi label sebagai dev pada Gambar 2), dan terbuka untuk 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

Saat cabang KMI ACK dideklarasikan sebagai fitur yang lengkap, cabang tersebut akan memasuki fase stabilisasi (diberi label sebagai stabil pada Gambar 2). Fitur partner dan perbaikan bug masih diterima, tetapi pelacakan KMI diaktifkan untuk mendeteksi perubahan apa pun 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 KMI ACK akan dibekukan dan tetap dibekukan selama masa aktif cabang. Artinya, tidak ada perubahan yang merusak KMI yang akan diterima kecuali jika masalah keamanan serius teridentifikasi yang tidak dapat dimitigasi tanpa memengaruhi KMI yang stabil. Untuk menghindari kerusakan KMI, beberapa patch yang digabungkan dari LTS dapat 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. Saat antarmuka baru ditambahkan ke KMI, antarmuka tersebut akan langsung menjadi stabil dan tidak dapat rusak oleh perubahan pada 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 aktif kernel GKI, kompatibilitas mundur dengan ruang pengguna dipertahankan sehingga kernel dapat digunakan dengan aman untuk rilis platform Android yang digunakan untuk meluncurkan perangkat. Pengujian berkelanjutan dengan rilis sebelumnya memastikan kompatibilitas tetap terjaga. Jadi, dalam Gambar 2, kernel android15-6.6 dapat digunakan untuk perangkat Android 15 dan perangkat yang lebih baru. Karena rilis platform Android juga kompatibel dengan versi sebelumnya, kernel android14-6.1 dapat digunakan untuk perangkat Android 15 baik untuk peluncuran maupun upgrade.

Nomor pembuatan KMI

Jika ada penggabungan LTS selama fase stabilisasi atau masalah keamanan atau peristiwa lain setelahnya yang mengharuskan patch yang mengubah KMI diterima, nomor pembuatan KMI yang dicatat di build.config.common akan bertambah. Pembuatan 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 generasi KMI berubah, kernel tidak kompatibel dengan modul vendor yang sesuai dengan generasi KMI sebelumnya, sehingga modul harus di-build ulang dan diupdate secara sinkron dengan kernel. Setelah KMI dibekukan, perubahan generasi KMI diperkirakan akan sangat jarang terjadi.

Kompatibilitas antar-kernel

Persyaratan kompatibilitas antara kernel dalam keluarga LTS yang sama akan berubah mulai dari kernel GKI 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 menggunakan kernel android14-6.1 yang dikembangkan untuk Android 14 (2023) dengan aman di perangkat yang menjalankan Android 15 (2024). Kompatibilitas diverifikasi melalui pengujian VTS dan CTS berkelanjutan pada kernel GKI dengan semua rilis yang didukung.

KMI stabil sehingga kernel dapat diupdate tanpa memerlukan pembuatan ulang modul kernel dalam image vendor.

Kompatibilitas KMI tidak dipertahankan di antara kernel 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 ini 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 (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

ACK menerima penggabungan LTS dari upstream dan perbaikan bug untuk kode khusus Android. Perbaikan ini mencakup semua patch keamanan kernel yang dikutip dalam Buletin Keamanan Android bulanan yang relevan dengan ACK.

ACK mungkin didukung lebih lama daripada kernel stabil upstream yang sesuai di kernel.org. Dalam hal ini, Google memberikan dukungan yang diperpanjang hingga tanggal akhir siklus proses (EOL) yang ditampilkan di bagian ini. Jika di-EOL, kernel tidak lagi didukung oleh Google dan perangkat yang menjalankannya dianggap rentan.

Mulai kernel 6.6, masa aktif dukungan untuk kernel stabil adalah 4 tahun.

Tabel ini menunjukkan masa aktif ACK yang didukung:

Cabang ACK Tanggal
peluncuran
Dukungan
sepanjang waktu
(tahun)
EOL
android-4.19-stable 2018-10-22 6 2025-01-01
Android 11-5.4 2019-11-24 6 2026-01-01
Android 12-5.4 2019-11-24 6 2026-01-01
android12-5.10 2020-12-13 6 2027-07-01
android13-5.10 2020-12-13 6 2027-07-01
android13-5.15 2021-10-31 6 2028-07-01
Android 14-5.15 2021-10-31 6 2028-07-01
android14-6.1 2022-12-11 6 2029-07-01
android15-6.6 2023-10-29 4 2028-07-01

Pengujian kernel umum

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

Pengujian Fungsional Kernel Linux

Pengujian Linux Kernel Functional Test (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-and-boot KernelCI dimulai setiap kali patch baru di-commit ke cabang kernel umum. Beberapa ratus 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 dimasukkan ke dalam kernel umum Android. Ringkasan hasil pengujian dapat ditemukan di tab 'Pemeriksaan' dari perubahan kode di gerrit kernel umum Android.

Pengujian pasca-pengiriman Android dilakukan pada build baru yang dipublikasikan di cabang kernel umum Android saat patch baru di-commit ke cabang kernel umum Android di ci.android.com. Dengan memasukkan aosp_kernel sebagai nama cabang sebagian 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 pra-pengiriman untuk cabang kernel Android. Misalnya, mengikuti konfigurasi di test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING akan mengaktifkan vts_kernel_proc_file_api_test sebagai pengujian pra-kirim di check-in kode kernel umum Android.

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

Pengujian zero day

Pengujian 0-day melakukan pengujian patch demi patch di 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 pengujian

Kernel umum Android Rilis Platform Android Suite Pengujian
Utama 15 14 13 12 11 10 LKFT KernelCI Pra-Kirim Setelah Kirim zero day
android-mainline
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

Berkontribusi pada kernel umum Android

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

Kirim patch ke Gerrit dan sesuaikan dengan pedoman kontribusi ini.