Kernel umum Android

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

  • Backport dan pilihan fungsionalitas upstream yang diperlukan untuk fitur Android
  • Fitur siap untuk perangkat Android namun masih dalam pengembangan upstream (misalnya, pengoptimalan penempatan tugas Energy Aware Scheduler).
  • Fitur vendor/OEM yang berguna bagi mitra ekosistem lainnya (misalnya, sdcardfs).

android-mainline adalah cabang pengembangan utama untuk fitur-fitur Android. Jalur utama Linux digabungkan ke android-mainline setiap kali Linus Torvalds memposting rilis atau kandidat rilis. Sebelum tahun 2019, kernel umum Android dibuat dengan mengkloning kernel LTS yang baru diumumkan dan menambahkan patch khusus Android. Proses ini berubah pada tahun 2019 untuk mencabangkan kernel umum Android yang 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 dipublikasikan.

Saat LTS baru dideklarasikan di upstream, kernel umum yang bersangkutan akan dicabangkan dari android-mainline . Hal ini memungkinkan mitra untuk memulai proyek sebelum deklarasi versi LTS, dengan menggabungkan dari android-mainline . Setelah cabang kernel umum baru dibuat, mitra dapat dengan mudah mengubah sumber penggabungan ke cabang baru.

Cabang kernel umum lainnya menerima penggabungan rutin dari kernel LTS terkaitnya. Penggabungan ini biasanya dilakukan segera setelah rilis LTS diposting. Misalnya, ketika Linux 4.19.64 diposting, Linux tersebut digabungkan ke dalam kernel umum 4.19 (misalnya, android-4.19-q ). Mitra sangat dianjurkan untuk secara teratur menggabungkan kernel umum ke dalam kernel produk mereka agar tetap mendapatkan informasi terbaru tentang LTS dan perbaikan bug khusus Android.

Cabang kernel ACK KMI

Kernel GKI memiliki Antarmuka Modul Kernel yang stabil. KMI diidentifikasi secara unik berdasarkan versi kernel dan rilis platform Android, sehingga cabangnya diberi nama <androidRelease>-<kernel version> . Misalnya, kernel 5.4 GKI untuk Android 11 diberi nama android11-5.4. Untuk Android 12 ada dua kernel GKI tambahan, android12-5.4 dan android12-5.10 .

Cabang kernel makanan penutup warisan

Kernel makanan penutup lama dibuat untuk menjamin bahwa pengembangan fitur baru tidak mengganggu penggabungan dari kernel umum Android. Cabang-cabang tersebut dibuat sebelum rilis makanan penutup terkait dan menerima penggabungan reguler dari LTS, tetapi tidak ada fitur baru. Misalnya, android-4.9-q menerima penggabungan dari cabang LTS 4.9.y.

Jika versi kernel bukan kernel peluncuran, maka tidak ada kernel pencuci mulut yang dibuat, namun kernel yang terkait dengan rilis platform terbaru valid untuk ditingkatkan ke rilis platform Android mendatang. Misalnya, android-4.9-q adalah yang terakhir dari cabang hidangan penutup android-4.9* , sehingga didukung dan diuji dengan rilis platform aslinya, Android 10. Ini juga didukung dan diuji dengan rilis platform yang mendukung peningkatan versi perangkat yang menjalankan 4.9 kernel: Android 11 dan Android 12.

Karena skema penamaan hidangan penutup untuk rilis platform Android dihilangkan pada Android 10, rilis hidangan penutup terakhir yang tadinya disebut android-4.14-r dan android-4.19-r malah disebut android-4.14-stable dan android-4.19-stable .

Kernel makanan penutup digantikan oleh kernel GKI yang dimulai dengan Android 11, jadi daftar lengkap kernel makanan penutup yang didukung ada di tabel ini.

Rilis platform Android Inti Didukung sampai
Android 10 android-4.9-q
android-4.14-q
android-4.19-q
Januari 2023
Android 11 android-4.14-stable
android-4.19-stable
Januari 2024
Desember 2024

Cabang kernel rilis lama

Kernel rilis dipertahankan untuk menyediakan backport patch yang dikutip dalam Buletin Keamanan Android bulanan. Mereka dibuat untuk setiap kernel peluncuran ketika ada rilis platform Android baru. Mereka tidak digunakan lagi ketika rilis kernel atau platform terkait tidak digunakan lagi seperti yang dijelaskan dalam Masa pakai dukungan dan patch keamanan .

Setiap bulan ketika Buletin Keamanan Android diterbitkan, kernel ini diperbarui dengan backport patch yang disebutkan dalam buletin yang relevan dengan kernel upstream dan kernel umum Android. Mereka tidak menerima patch LTS, jadi nomor versi minor tidak pernah berubah. Mereka tidak berisi backport untuk patch khusus vendor.

Pada rilis platform Android 11 dan yang lebih baru, mitra harus bergabung dari dessert atau kernel GKI untuk menerapkan patch yang disebutkan dalam Buletin Keamanan Android. Tidak ada kernel rilis yang akan dibuat untuk rilis platform Android 11 atau lebih baru.

Oleh karena itu, daftar lengkap 14 kernel rilis ditampilkan dalam tabel ini, dan tidak ada yang akan ditambahkan.

Rilis platform Android Inti Didukung sampai
Android 10 android-4.9-q-release
android-4.14-q-release
android-4.19-q-release
Januari 2023

Menampilkan dan meluncurkan kernel

Setiap rilis platform Android mendukung peluncuran perangkat baru berdasarkan salah satu dari tiga versi kernel Linux. Seperti yang ditunjukkan pada tabel di bawah, kernel peluncuran untuk Android 11 adalah android-4.14-stable , android-4.19-stable , dan android11-5.4 .

Karena pemutakhiran kernel umumnya tidak diperlukan saat memperbarui 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 10, seperti android-4.19-q , dapat digunakan pada perangkat bahkan setelah mengupgrade rilis platform ke Android 11. Mulai Android 12, kernel fitur akan lebih sedikit dibandingkan kernel peluncuran untuk membatasi jumlah KMI stabil yang harus didukung.

Rilis platform Android Luncurkan kernel Fitur kernel
Android 14 (2023) android14-6.1
android14-5.15
android13-5.15
android13-5.10
android12-5.10 1
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.10 1
android12-5.4 1
android11-5.4 1
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.4 1
android-4.19-stable
android12-5.10
android12-5.4
Android 11 (2020) android11-5.4
android-4.19-stable
android-4.14-stable
android11-5.4
android-4.19-stable
android-4.14-stable
Android 10 (2019) android-4.19-q
android-4.14-q
android-4.9-q

android-4.19-q
android-4.14-q
android-4.9-q

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

Hirarki kernel umum

Cabang dari android-mainline

Tingkat teratas dari hierarki kernel 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 baru android12-5.10 dicabangkan dari android-mainline pada tahun 2020. Pada tahun 2021, ketika LTS berikutnya dideklarasikan, android13-5.15 dicabangkan dari android-mainline .

Seperti yang ditunjukkan pada Gambar 1, setiap versi kernel merupakan dasar untuk dua kernel GKI. Misalnya, dua kernel v5.4 adalah android11-5.4 dan android12-5.4 , keduanya merupakan kernel fitur untuk rilis platformnya masing-masing. Hal ini juga akan terjadi pada versi 5.10; android12-5.10 dibuat ketika LTS dideklarasikan dan android13-5.10 akan bercabang dari android12-5.10 pada pencapaian fitur kernel yang lengkap pada Musim Semi 2021 untuk memungkinkan pengembangan fitur untuk Android 13.

Siklus hidup cabang ACK KMI

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

5.10 Siklus hidup cabang ACK KMI

Gambar 2. 5.10 siklus hidup cabang ACK KMI

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

Setiap cabang ACK KMI berputar melalui tiga fase yang ditunjukkan pada Gambar 2 dengan warna berbeda di setiap cabang. Seperti yang ditunjukkan, LTS digabungkan secara teratur, apa pun fasenya.

Fase pengembangan

Saat dibuat, cabang ACK KMI memasuki tahap pengembangan ( dev pada Gambar 2), dan terbuka untuk kontribusi fitur untuk rilis platform Android berikutnya. Pada Gambar 2, android12-5.10 dibuat ketika 5.10 dideklarasikan sebagai kernel LTS upstream yang baru. Cabang ACK KMI kedua untuk versi kernel mungkin dibuat lebih awal untuk memungkinkan pengembangan rilis berikutnya. Pada Gambar 2, android13-5.10 dibuat saat android12-5.10 bertransisi keluar dari fase pengembangan.

Fase stabilisasi

Ketika cabang ACK KMI dinyatakan selesai fitur, ia memasuki fase stabilisasi , diberi label sebagai tusukan pada Gambar 2. Fitur mitra dan perbaikan bug masih diterima, namun pelacakan KMI diaktifkan untuk mendeteksi perubahan apa pun yang memengaruhi antarmuka. Pada fase ini, perubahan yang melanggar KMI diterima, namun definisi KMI harus diperbarui seperlunya. Lihat ikhtisar GKI untuk rincian pemantauan KMI.

Fase beku KMI

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

Ketika cabang ACK KMI dibekukan, perbaikan bug dan fitur mitra dapat diterima selama kernel umum KMI yang ada tidak rusak. KMI dapat diperluas dengan simbol baru yang diekspor selama antarmuka yang terdiri dari KMI saat ini tidak terpengaruh. Ketika antarmuka baru ditambahkan ke KMI, antarmuka tersebut segera menjadi stabil dan tidak dapat dirusak oleh perubahan di masa mendatang.

Misalnya, perubahan yang menambahkan bidang ke struktur yang digunakan oleh kernel umum antarmuka KMI tidak diperbolehkan 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 ruang pengguna dipertahankan sehingga kernel dapat digunakan dengan aman untuk rilis platform Android yang digunakan perangkat tersebut untuk diluncurkan. Pengujian berkelanjutan dengan rilis sebelumnya memastikan kompatibilitas tetap terjaga. Jadi pada Gambar 2, kernel android12-5.10 dapat digunakan untuk perangkat Android 12 dan perangkat Android 13. Karena rilis platform Android juga kompatibel dengan versi sebelumnya, kernel android12-5.4 dapat digunakan untuk perangkat Android 13 baik untuk peluncuran maupun upgrade.

Saat memasuki fase beku, cabang diberi tag git dengan string versi KMI yang berisi nomor generasi KMI. Misalnya, ketika android11-5.4 dibekukan, ia ditandai dengan string versi KMI 5.4-android11-0 dengan angka 0 di belakangnya adalah nomor generasi KMI. Jika ada masalah keamanan atau kejadian lain yang mengharuskan patch pengubah KMI diterima, nomor pembuatan KMI akan bertambah dan cabang diberi tag ulang. Misalnya, jika perubahan tersebut diterima di android11-5.4 , cabang tersebut akan ditandai dengan versi KMI yang baru, 5.4-android11-1 . Generasi KMI saat ini dapat diketahui dengan menggunakan perintah uname :

$ uname -r
5.4.61-android11-0-00153-ga972f59040e4

Nomor setelah rilis platform adalah generasi KMI (dalam hal ini 0).

Jika generasi KMI berubah, kernel tidak kompatibel dengan modul vendor yang sesuai dengan generasi KMI sebelumnya, sehingga modul harus dibangun kembali dan diperbarui secara sinkron dengan kernel. Pergantian generasi KMI diperkirakan akan sangat jarang terjadi.

Kompatibilitas antar kernel

Persyaratan kompatibilitas antar kernel dalam keluarga LTS yang sama berubah sejak kernel GKI baru.

Kernel GKI

Kernel GKI menjaga kompatibilitas 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 android12-5.4 dengan aman yang dikembangkan untuk Android 12 pada perangkat yang menjalankan Android 13. Kompatibilitas diverifikasi melalui pengujian VTS dan CTS berkelanjutan pada kernel GKI dengan semua rilis yang didukung.

KMI stabil sehingga kernel dapat diperbarui tanpa memerlukan pembangunan kembali modul kernel di image vendor.

Kompatibilitas KMI tidak dipertahankan di antara kernel GKI yang berbeda. Jadi, misalnya, android12-5.10 tidak dapat diganti dengan kernel android13-5.10 tanpa membangun kembali semua modul.

Kernel GKI hanya didukung untuk rilis awal dan selanjutnya. Mereka tidak didukung untuk rilis lama. Jadi kernel android13-5.10 tidak didukung di perangkat Android 12.

Kernel lama

Kernel makanan penutup lama ( *-q dan *-stable ) tidak kompatibel dengan rilis platform Android, namun kernel dari dua rilis platform Android sebelumnya didukung untuk peningkatan. Oleh karena itu, perangkat yang diluncurkan dengan Android 10 menggunakan kernel berbasis android-4.19-q dapat terus menggunakan kernel android-4.19-q saat melakukan upgrade ke Android 2020, atau memperbarui kode khusus vendor untuk mendukung android-4.19-stable .

Matriks kompatibilitas

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

Rilis platform Android Kernel yang didukung untuk peningkatan Kernel yang didukung untuk diluncurkan
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
android-4.14-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
android-4.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.9-q (EOL)
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.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.14-p (EOL)
android-4.9-q (EOL)
android-4.9-p (EOL)
android-4.9-o (EOL)
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
Android 11 (2020) android11-5.4
android-4.19-stable
android-4.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.14-p (EOL)
android-4.9-q (EOL)
android-4.9-p (EOL)
android-4.9-o (EOL)
android-4.4-p (EOL)
android-4.4-o (EOL)
android11-5.4
android-4.19-stable
android-4.14-stable
Android 10 (2019) android-4.14-stable
android-4.14-p (EOL)
android-4.9-p (EOL)
android-4.9-o (EOL)
android-4.4-p (EOL)
android-4.4-o (EOL)
android-3.18 (EOL)
android-4.14-stable
android-4.19-q (EOL)
android-4.14-q (EOL)
android-4.9-q (EOL)

Mendukung masa pakai dan patch keamanan

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

Mitra dapat yakin bahwa dengan menggabungkan kernel umum Android secara rutin, mereka mendapatkan semua patch keamanan kernel yang memungkinkan.

Pengujian kernel umum

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

Tes Fungsi Kernel Linux

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

pengujian KernelCI

Pengujian build-and-boot KernelCI dimulai setiap kali patch baru dikomit ke cabang kernel umum. Beberapa ratus konfigurasi build diuji dan di-boot di berbagai board. Hasil terkini untuk kernel Android dapat ditemukan di sini .

Pengujian pra-pengiriman dan pasca-pengiriman Android

Tes pra-pengiriman digunakan untuk mencegah kegagalan masuk ke kernel umum Android. Ringkasan hasil tes dapat ditemukan di tab 'Pemeriksaan' perubahan kode di gerrit kernel umum Android.

Pengujian pascapengiriman Android dilakukan pada build baru yang dipublikasikan di cabang kernel umum Android ketika patch baru diterapkan ke cabang kernel umum Android di ci.android.com . Dengan memasukkan aosp_kernel sebagai sebagian nama cabang 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 pohon sumber platform Android akan dijalankan sebagai presubmit untuk cabang kernel Android. Misalnya konfigurasi berikut di 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 hari melakukan pengujian patch demi patch pada semua cabang kernel umum Android saat patch baru diterapkan. Berbagai tes boot, fungsional, dan kinerja dijalankan. Bergabunglah dengan grup publik laporan pembangunan lintas-kernel

Matriks uji

Kernel umum Android Rilis Platform Android Ruang Tes
Utama 14 13 12 11 10 LKFT KernelCI Pra Kirim Posting Kirim 0 hari
android-mainline
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
android-4.19-stable
android-4.14-stable

Berkontribusi pada kernel umum Android

Secara umum, pengembangan fitur harus dilakukan pada Linux arus utama dan bukan pada kernel umum Android. Pengembangan di hulu 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 kepentingan ekosistem Android.

Kirimkan tambalan ke Gerrit dan patuhi pedoman kontribusi ini.