Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Kernel Umum Android

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

  • Backport dan cherry-picks dari fungsionalitas upstream yang diperlukan untuk fitur Android
  • Fitur siap untuk perangkat Android tetapi masih dalam pengembangan upstream (misalnya, pengoptimalan penempatan tugas Penjadwal Sadar Energi).
  • Fitur vendor / OEM yang berguna untuk mitra ekosistem lainnya (misalnya, sdcardfs).

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

Saat LTS baru dideklarasikan ke upstream, kernel umum terkait akan bercabang dari android-mainline . Hal ini memungkinkan partner untuk memulai proyek sebelum deklarasi versi LTS, dengan menggabungkan dari android-mainline . Setelah cabang kernel umum baru dibuat, mitra dapat dengan mulus mengubah sumber gabungan ke cabang baru.

Cabang kernel umum lainnya menerima penggabungan reguler dari kernel LTS terkait. Ini biasanya dilakukan segera setelah rilis LTS diposting. Misalnya, ketika Linux 4.19.64 diposting, itu digabungkan menjadi 4.19 kernel umum (misalnya, android-4.19-q ). Mitra sangat dianjurkan untuk secara teratur menggabungkan dari kernel umum ke dalam kernel produk mereka untuk tetap up-to-date dengan perbaikan bug khusus LTS dan Android.

Persyaratan

Berikut beberapa istilah baru yang digunakan dalam dokumen ini untuk menjelaskan kebijakan kernel umum Android.

Kernel fitur

Kernel yang disempurnakan dengan fitur untuk rilis platform Android terbaru disebut kernel fitur . Untuk Android 11, kernel fitur didasarkan pada versi kernel 4.14.y, 4.19.y, dan 5.4.y. Dalam rilis platform sebelumnya, kernel fitur sama dengan kernel peluncuran. Namun, di Android 12 akan ada dua kernel fitur dan tiga kernel peluncuran.

Gambar Kernel Generik

Mulai Android 11, kernel umum Android digunakan untuk membuat Gambar Kernel Generik (GKI), yang merupakan gambar kernel Aarch64 yang dapat digunakan untuk menjalankan perangkat apa pun dengan SoC dan dukungan driver yang diimplementasikan dalam modul vendor. Untuk detailnya, lihat gambaran GKI .

Antarmuka Modul Kernel

GKI memperkenalkan konsep Kernel Module Interface (KMI) yang stabil yang memungkinkan inti inti diperbarui secara asinkron dari modul vendor. Ketika KMI dibekukan, maka tidak ada perubahan yang dapat dilakukan yang merusak kompatibilitas biner dengan modul vendor yang ada. Lihat ikhtisar GKI untuk detail tentang KMI.

Luncurkan kernel

Kernel peluncuran yang ditunjuk dapat digunakan untuk meluncurkan perangkat dengan rilis platform Android tertentu. Untuk Android 11, perangkat dapat diluncurkan dengan kernel berdasarkan versi kernel 4.14.y, 4.19.y, dan 5.4.y.

Jenis cabang kernel yang umum

Cabang kernel KMI

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

Cabang kernel makanan penutup warisan

Kernel pencuci mulut lama dibuat untuk menjamin bahwa pengembangan fitur baru tidak mengganggu penggabungan dari kernel umum Android. Cabang 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 bukanlah kernel peluncuran, tidak ada kernel makanan penutup yang dibuat, tetapi kernel yang terkait dengan rilis platform terbaru valid untuk meningkatkan ke rilis platform Android mendatang. Misalnya, android-4.4-p adalah yang terakhir dari cabang makanan penutup android-4.4* , sehingga didukung dan diuji dengan rilis platform aslinya, Android 9 (Pai). Ini juga didukung dan diuji dengan rilis platform yang mendukung peningkatan perangkat yang menjalankan kernel 4.4: Android 10 dan Android 11.

Karena skema penamaan makanan penutup untuk rilis platform Android dihilangkan dengan Android 10, rilis makanan penutup terakhir yang 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 KMI yang dimulai dengan Android 11, jadi daftar lengkap kernel makanan penutup yang didukung ada di tabel ini.

Rilis platform Android Inti Didukung sampai
Android 8.1 (Oreo) android-4.4-o
android-4.9-o
Juni 2021
Android 9 (Pai) android-4.4-p
android-4.9-p
android-4.14-p
Januari 2022
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

Cabang kernel rilis lama

Kernel rilis dipertahankan untuk menyediakan backport dari tambalan yang dikutip dalam Buletin Keamanan Android bulanan. Mereka dibuat untuk setiap kernel peluncuran saat 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 saat Android Security Bulletin diterbitkan, kernel ini diperbarui dengan backport dari tambalan yang dikutip dalam buletin yang relevan dengan kernel hulu dan kernel umum Android. Mereka tidak menerima patch LTS, jadi nomor versi minor tidak pernah berubah. Mereka tidak mengandung backport untuk tambalan khusus vendor.

Di Android 11 dan rilis platform yang lebih baru, partner harus menggabungkan dari dessert atau kernel KMI untuk menerapkan patch yang dikutip di Android Security Bulletin. Tidak ada kernel rilis yang akan dibuat untuk rilis platform Android 11 atau yang lebih baru.

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

Rilis platform Android Inti Didukung sampai
Android 8.0 (Oreo) android-3.18-o-release
android-4.4-o-release
android-4.9-o-release
Januari 2021
Android 8.1 (Oreo MR1) android-3.18-o-mr1
android-4.4-o-mr1
android-4.9-o-mr1
Juni 2021
Android 9 (Pai) android-4.4-p-release
android-4.9-p-release
android-4.14-p-release
Januari 2022
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 peningkatan 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 dirancang untuk Android 10, seperti android-4.19-q , dapat digunakan pada perangkat bahkan setelah mengupgrade rilis platform ke Android 11. Dimulai dengan Android 12, akan ada lebih sedikit kernel fitur daripada kernel peluncuran untuk membatasi jumlah kernel. KMI stabil yang harus didukung.

Rilis platform Android Luncurkan kernel Kernel fitur
Android 9 (2018) android-4.4-p
android-4.9-p
android-4.14-p
android-4.4-p
android-4.9-p
android-4.14-p

Android 10 (2019) android-4.9-q
android-4.14-q
android-4.19-q

android-4.9-q
android-4.14-q
android-4.19-q
Android 11 (2020) android-4.14-stable
android-4.19-stable
android11-5.4
android-4.14-stable
android-4.19-stable
android11-5.4
Android 12 (2021) android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
android12-5.4
android12-5.10
Android T (percobaan AOSP) (2022) 1 android12-5.4
android12-5.10
android13-5.10
android13-5.x
android13-5.10
android13-5.x 2

1 Android T (percobaan AOSP) (2022) tidak berkomitmen dan hanya ditampilkan untuk mendemonstrasikan bagaimana model percabangan baru akan berkembang di masa depan dengan dua fitur dan tiga kernel peluncuran.

2 Di mana 5.x adalah versi kernel yang dipilih sebagai LTS pada akhir 2021.

Hierarki kernel umum

Bercabang dari android-mainline

Tingkat teratas dari hierarki kernel umum ditunjukkan pada Gambar 1.

Membuat kernel umum dari android-mainline kernel

Gambar 1. Membuat kernel umum dari android-mainline kernel

Perhatikan bahwa kernel umum Android baru android12-5.10 telah bercabang dari android-mainline pada tahun 2020. Pada tahun 2021, ketika LTS berikutnya dideklarasikan, android13-5.x (dengan 5.xy adalah versi kernel yang dipilih sebagai LTS) akan bercabang dari android-mainline .

Seperti yang ditunjukkan pada Gambar 1, setiap versi kernel adalah dasar untuk dua kernel KMI. Misalnya, dua kernel v5.4 adalah android11-5.4 dan android12-5.4 , keduanya merupakan kernel fitur untuk rilis platform masing-masing. Ini akan menjadi kasus untuk 5,10 juga; android12-5.10 dibuat saat LTS dideklarasikan dan android13-5.10 akan bercabang dari android12-5.10 di fitur kernel, menyelesaikan milestone pada Musim Semi 2021 guna memungkinkan pengembangan fitur untuk Android T (eksperimental AOSP).

Siklus hidup cabang KMI

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

5.10 siklus hidup cabang KMI

Gambar 2. 5.10 siklus hidup cabang KMI

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

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

Fase pengembangan

Saat dibuat, cabang KMI memasuki fase pengembangan ( dev pada Gambar 2), dan terbuka untuk kontribusi fitur untuk rilis platform Android berikutnya. Pada Gambar 2, android12-5.10 dibuat saat 5.10 dideklarasikan sebagai kernel LTS upstream baru. Cabang 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 KMI dinyatakan sebagai fitur lengkap, ia memasuki fase stabilisasi , diberi label sebagai tusukan pada Gambar 2. Fitur mitra dan perbaikan bug masih diterima, tetapi pelacakan KMI diaktifkan untuk mendeteksi perubahan apa pun yang memengaruhi antarmuka. Dalam fase ini, perubahan yang melanggar KMI diterima, tetapi definisi KMI harus diperbarui seperlunya. Lihat gambaran umum GKI untuk rincian pemantauan KMI.

Fase pembekuan KMI

Sebelum rilis platform baru didorong ke AOSP, cabang KMI dibekukan dan tetap dibekukan selama masa pakai cabang. Ini berarti bahwa tidak ada perubahan yang melanggar KMI yang diterima kecuali ada masalah keamanan yang serius yang tidak dapat diatasi tanpa mempengaruhi KMI yang stabil. Untuk menghindari kerusakan KMI, beberapa tambalan yang digabungkan dari LTS mungkin dimodifikasi atau dihilangkan jika perbaikan tidak diperlukan untuk perangkat Android.

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

Misalnya, perubahan yang menambahkan bidang 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);

Untuk masa pakai kernel KMI, kompatibilitas mundur dengan ruang pengguna dipertahankan sehingga kernel dapat digunakan dengan aman untuk rilis platform Android tempat perangkat diluncurkan. Pengujian berkelanjutan dengan rilis sebelumnya memastikan bahwa kompatibilitas dipertahankan. Jadi pada Gambar 2, kernel android12-5.10 dapat digunakan untuk perangkat Android 12 dan perangkat Android T (percobaan AOSP). Karena rilis platform Android juga kompatibel dengan versi sebelumnya, kernel android12-5.4 dapat digunakan untuk perangkat Android T (eksperimental AOSP) baik untuk peluncuran atau peningkatan.

Saat memasuki fase beku, cabang diberi git-tag dengan string versi KMI yang berisi nomor generasi KMI. Misalnya, saat android11-5.4 dibekukan, itu ditandai dengan string versi KMI 5.4-android11-0 dengan 0 belakangnya adalah nomor generasi KMI. Jika ada masalah keamanan atau peristiwa lain yang memerlukan patch pengubah KMI untuk diterima, nomor generasi KMI bertambah dan cabang diberi tag ulang. Misalnya, jika perubahan seperti itu diterima di android11-5.4 , cabang akan diberi tag dengan versi KMI yang baru, 5.4-android11-1 . Generasi KMI saat ini dapat ditemukan menggunakan perintah uname :

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

Nomor setelah peluncuran platform adalah generasi KMI (0 dalam kasus ini).

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

Kompatibilitas antar kernel

Persyaratan kompatibilitas antara kernel dalam keluarga LTS yang sama berubah dimulai dengan kernel KMI yang baru.

Kernel KMI

Kernel KMI baru mempertahankan kompatibilitas mundur dengan semua rilis platform Android yang mendukung versi kernel. Jadi, kernel android12-5.4 dikembangkan untuk Android 12 dapat digunakan dengan aman pada perangkat yang menjalankan Android 11. Pengujian VTS dan CTS berkelanjutan dari kernel stabil dengan rilis sebelumnya memastikan kompatibilitas dipertahankan.

KMI stabil sehingga kernel dapat diperbarui tanpa memerlukan pembuatan ulang modul kernel di image vendor.

Kernel warisan

Kernel pencuci mulut yang lama ( *-o , *-p , *-q , *-stable ) tidak kompatibel dengan versi sebelumnya di seluruh rilis platform Android, tetapi 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 mengupgrade ke Android 2020, atau mengupdate kode khusus vendor untuk mendukung android-4.19-stable .

Matriks kompatibilitas

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

Rilis platform Android Kernel yang didukung untuk peningkatan Kernel yang didukung untuk peluncuran
Android 9 (2018) android-3.10
android-3.18
android-4.4-o
android-4.9-o
android-4.4-p
android-4.9-p
android-4.14-p
Android 10 (2019) android-3.18
android-4.4-o
android-4.9-o
android-4.4-p
android-4.9-p
android-4.14-p
android-4.9-q
android-4.14-q
android-4.19-q
Android 11 (2020) android-4.4-o
android-4.4-p
android-4.9-o
android-4.9-p
android-4.9-q
android-4.14-p
android-4.14-q
android-4.19-q
android-4.14-stable
android-4.19-stable
android11-5.4
Android 12 (2021) android-4.9-o
android-4.9-p
android-4.9-q
android-4.14-p
android-4.14-q
android-4.19-q
android-4.14-stable
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10
android-4.19-stable
android11-5.4
android12-5.4
android12-5.10

Mendukung masa pakai dan tambalan keamanan

Kernel umum Android didukung hingga kernel LTS terkait atau rilis Platform Android tidak lagi didukung. Meskipun didukung, kernel terus menerima gabungan 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 kernel umum Android.

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

Pengujian kernel umum

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

Pengujian Fungsional Kernel Linaro

Pengujian Linaro Kernel Functional Testing (LKFT) memulai berbagai rangkaian pengujian termasuk kselftest, LTP, VTS, dan CTS pada satu set perangkat fisik arm32 dan arm64. Hasil tes terbaru dapat ditemukan di sini .

Pengujian KernelCI

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

Pengujian pra-pengiriman dan pasca-pengiriman Android

Tes pra-pengiriman digunakan untuk mencegah kegagalan dimasukkan ke kernel umum. Hasil tidak tersedia untuk umum saat ini.

Pengujian pasca pengiriman Android dilakukan saat patch baru diterapkan ke cabang kernel umum. Dengan memasukkan aosp_kernel sebagai nama cabang sebagian, Anda melihat daftar cabang kernel dengan hasil yang tersedia. Misalnya, hasil untuk android-mainline dapat ditemukan di sini .

Pengujian 0 hari

Pengujian 0-hari melakukan pengujian patch-by-patch pada semua cabang kernel umum Android saat patch baru diterapkan. Berbagai tes boot, fungsional, dan kinerja dijalankan. Bergabunglah dengan grup publik cros-kernel-buildreports

Matriks uji

Kernel umum Android Rilis Platform Android Suite Uji
Menguasai 11 10 9 (Pai) 8 (Oreo) LKFT KernelCI Pra Kirim Posting Kirim 0 hari
android-mainline
android12-5.4
android11-5.4
android-4.19-stable
android-4.14-stable
android-4.19-q
android-4.14-q
android-4.9-q
android-4.14-p
android-4.9-p
android-4.4-p
android-4.9-o
android-4.4-o
android-3.18

Berkontribusi pada kernel umum Android

Umumnya, pengembangan fitur harus dilakukan di Linux jalur utama dan bukan di kernel umum Android. Pengembangan hulu sangat dianjurkan, dan setelah pengembangan diterima di sana, 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.