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

Kernel Umum Android

The AOSP umum kernel (juga dikenal sebagai common Android kernel atau ACK) yang hilir kernel.org kernel dan termasuk patch menarik bagi masyarakat Android yang belum bergabung ke dalam arus utama atau Long Term Didukung (LTS) kernel. Tambalan ini dapat mencakup:

  • Backports dan pilihan fungsi hulu yang diperlukan untuk fitur Android
  • Fitur siap untuk perangkat Android tetapi masih dalam pengembangan upstream (misalnya, pengoptimalan penempatan tugas Energy Aware Scheduler).
  • Fitur Vendor/OEM yang berguna untuk mitra ekosistem lainnya (misalnya, sdcardfs).

android-mainline adalah cabang pengembangan utama untuk fitur Android. Linux arus utama bergabung ke android-mainline setiap kali Linus Torvalds posting siaran atau kandidat rilis. Sebelum 2019, kernel umum Android dibuat dengan mengkloning kernel LTS yang baru saja dideklarasikan dan menambahkan patch khusus Android. Proses ini berubah di tahun 2019 untuk cabang 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 pengujian terus menerus mengalami signifikan, model ini menjamin kernel berkualitas tinggi dari hari itu diterbitkan.

Ketika LTS baru dinyatakan hulu, kernel umum sesuai bercabang dari android-mainline . Hal ini memungkinkan mitra untuk memulai sebuah 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 mereka terkait LTS kernel . Ini biasanya dilakukan segera setelah rilis LTS diposting. Misalnya, ketika Linux 4.19.64 telah diposting, itu digabung ke dalam 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 LTS dan perbaikan bug khusus Android.

Ketentuan

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

Kernel fitur

Kernel yang ditingkatkan dengan fitur-fitur untuk rilis terbaru platform Android disebut kernel fitur. Untuk Android 11, kernel fitur didasarkan pada kernel versi 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 Umum

Dimulai dengan 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 rincian, lihat GKI gambaran .

Antarmuka Modul Kernel

GKI memperkenalkan konsep stabil Kernel Module Interface (KMI) yang memungkinkan kernel inti diperbarui asynchronously dari modul penjual. Ketika KMI dibekukan, maka tidak ada perubahan yang dapat dilakukan yang merusak kompatibilitas biner dengan modul vendor yang ada. Lihat GKI gambaran 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 kernel versi 4.14.y, 4.19.y, dan 5.4.y.

Jenis cabang kernel umum

Cabang kernel KMI

KMI kernel memiliki stabil Kernel Modul Interface. The KMI unik diidentifikasi oleh versi kernel dan rilis platform Android, sehingga cabang-cabang yang bernama <androidRelease>-<kernel version> . Sebagai contoh, 5,4 KMI kernel untuk Android 11 bernama 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 gabungan dari cabang 4.9.y LTS.

Jika versi kernel bukan kernel peluncuran, tidak ada kernel pencuci mulut yang dibuat, tetapi kernel yang terkait dengan rilis platform terbaru valid untuk memutakhirkan ke rilis platform Android mendatang. Misalnya, android-4.4-p adalah yang terakhir dari android-4.4* cabang hidangan penutup, jadi itu didukung dan diuji dengan rilis platform aslinya, Android 9 (Pie). Ini juga didukung dan diuji dengan rilis platform yang mendukung peningkatan perangkat yang menjalankan kernel 4.4: Android 10 dan Android 11.

Karena makanan penutup skema penamaan untuk platform Android rilis dijatuhkan dengan Android 10, rilis makanan penutup terakhir yang akan 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 memberikan backports patch dikutip dalam bulanan Keamanan Android Bulletin . Mereka dibuat untuk setiap kernel peluncuran ketika ada rilis platform Android baru. Mereka ditinggalkan ketika terkait kernel atau platform rilis sudah ditinggalkan seperti yang dijelaskan dalam masa hidup Dukungan dan patch keamanan .

Setiap bulan ketika Buletin Keamanan Android diterbitkan, kernel ini diperbarui dengan backport dari patch yang dikutip 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.

Di Android 11 dan rilis platform yang lebih baru, mitra harus bergabung dari makanan penutup atau kernel KMI untuk menerapkan patch yang dikutip dalam Buletin Keamanan Android. Tidak ada kernel rilis yang akan dibuat untuk Android 11 atau rilis platform yang lebih baru.

Oleh karena itu, daftar lengkap dari 14 kernel rilis ditampilkan dalam 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 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 dirancang untuk Android 10, seperti android-4.19-q , dapat digunakan pada perangkat bahkan setelah upgrade rilis platform ke Android 11. Dimulai dengan Android 12, akan ada lebih sedikit kernel fitur dari peluncuran kernel untuk membatasi jumlah 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 (AOSP percobaan) (2022) 1 android12-5.4
android12-5.10
android13-5.10
android13-5.x
android13-5.10
android13-5.x 2

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

2 Dimana 5.x adalah versi kernel terpilih sebagai LTS pada akhir 2021.

Hirarki kernel umum

Bercabang 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 android-arus utama kernel

Perhatikan bahwa umum Android baru kernel android12-5.10 itu bercabang dari android-mainline di tahun 2020. Pada 2021, ketika LTS berikutnya dinyatakan, android13-5.x (di mana 5.xy adalah versi kernel terpilih sebagai LTS) akan cabang dari android-mainline .

Seperti yang ditunjukkan pada Gambar 1, setiap versi kernel adalah dasar untuk dua kernel KMI. Sebagai contoh, dua kernel v5.4 adalah android11-5.4 dan android12-5.4 , yang keduanya fitur kernel untuk platform masing-rilis mereka. Ini akan menjadi kasus untuk 5.10 juga; android12-5.10 diciptakan ketika LTS dinyatakan dan android13-5.10 akan cabang dari android12-5.10 di fitur kernel tonggak lengkap di Spring 2021 untuk memungkinkan pengembangan fitur untuk Android T (AOSP percobaan).

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 KMI cabang siklus hidup

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

Setiap cabang KMI melewati tiga fase yang ditunjukkan pada Gambar 2 dengan warna yang berbeda di setiap cabang. Seperti yang ditunjukkan, LTS secara teratur digabungkan terlepas dari fase.

Fase pengembangan

Ketika itu dibuat, cabang KMI memasuki tahap pengembangan (dev pada Gambar 2), dan terbuka untuk kontribusi fitur untuk rilis platform Android berikutnya. Dalam Gambar 2, android12-5.10 diciptakan ketika 5.10 dinyatakan sebagai kernel LTS hulu baru. Cabang KMI kedua untuk versi kernel mungkin dibuat lebih awal untuk memungkinkan pengembangan rilis berikutnya. Dalam Gambar 2, android13-5.10 dibuat ketika android12-5.10 transisi dari tahap pengembangan.

Fase stabilisasi

Ketika cabang KMI dinyatakan fitur yang lengkap, memasuki fase stabilisasi, dicap sebagai tusukan pada Gambar 2. Partner fitur dan perbaikan bug masih diterima, tetapi pelacakan KMI diaktifkan untuk mendeteksi perubahan yang mempengaruhi antarmuka. Pada fase ini, perubahan yang melanggar KMI diterima, tetapi definisi KMI harus diperbarui seperlunya. Lihat GKI gambaran untuk rincian tentang pemantauan KMI.

Fase beku KMI

Sebelum rilis platform baru didorong ke AOSP, cabang KMI beku dan sisa-sisa beku untuk seumur hidup cabang. Ini berarti bahwa tidak ada perubahan yang melanggar KMI yang diterima kecuali masalah keamanan serius diidentifikasi yang tidak dapat dikurangi tanpa mempengaruhi KMI yang stabil. Untuk menghindari kerusakan KMI, beberapa tambalan yang digabungkan dari LTS mungkin dimodifikasi atau dihapus 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 dilanggar 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 KMI, kompatibilitas mundur dengan ruang pengguna dipertahankan sehingga kernel dapat digunakan dengan aman untuk rilis platform Android yang digunakan perangkat untuk diluncurkan. Pengujian berkelanjutan dengan rilis sebelumnya memastikan kompatibilitas tetap terjaga. Jadi dalam Gambar 2, android12-5.10 kernel dapat digunakan untuk Android 12 perangkat dan Android T (AOSP percobaan) perangkat. Karena rilis platform Android ini juga kompatibel dengan versi sebelumnya, android12-5.4 kernel dapat digunakan untuk Android T (AOSP percobaan) perangkat baik untuk peluncuran atau upgrade.

Saat memasuki fase beku, cabang diberi tag git dengan string versi KMI yang berisi nomor generasi KMI. Misalnya, ketika android11-5.4 adalah beku, itu ditandai dengan KMI string versi 5.4-android11-0 mana trailing 0 adalah jumlah generasi KMI. Jika ada masalah keamanan atau kejadian lain yang memerlukan patch perubahan KMI untuk diterima, nomor generasi KMI bertambah dan cabang diberi tag ulang. Sebagai contoh, jika perubahan tersebut diterima dalam android11-5.4 , cabang akan ditandai dengan versi KMI baru, 5.4-android11-1 . Generasi KMI saat ini dapat ditemukan dengan menggunakan uname perintah:

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

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

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. Perubahan generasi KMI diperkirakan sangat jarang terjadi.

Kompatibilitas antar kernel

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

kernel KMI

Kernel KMI baru mempertahankan kompatibilitas mundur dengan semua rilis platform Android yang mendukung versi kernel. Selain itu, rilis platform Android kompatibel dengan kernel KMI dari rilis sebelumnya. Jadi Anda dapat dengan aman menggunakan android12-5.4 kernel yang dikembangkan untuk Android 12 pada perangkat yang menjalankan Android T (AOSP percobaan). Kompatibilitas diverifikasi melalui pengujian VTS dan CTS berkelanjutan dari kernel KMI dengan semua rilis yang didukung.

KMI stabil sehingga kernel dapat diperbarui tanpa memerlukan pembuatan ulang modul kernel pada citra vendor.

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

Kernel KMI hanya didukung untuk rilis awal dan rilis berikutnya. Mereka tidak didukung untuk rilis yang lebih lama. Jadi sebuah android13-5.10 kernel tidak didukung pada Android 12 perangkat.

Kernel lama

Warisan makanan penutup kernel ( *-o , *-p , *-q , *-stable ) tidak kompatibel di seluruh platform Android rilis, tapi kernel dari sebelumnya dua platform yang rilis Android yang didukung untuk upgrade. Oleh karena itu, perangkat diluncurkan dengan Android 10 menggunakan kernel berdasarkan android-4.19-q baik dapat terus menggunakan android-4.19-q kernel ketika upgrade ke Android 2020, atau memperbarui kode khusus vendor untuk dukungan 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 diluncurkan
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 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 dikutip dalam bulanan Android Buletin keamanan yang relevan dengan kernel umum Android.

Mitra dapat yakin bahwa dengan menggabungkan secara teratur dari kernel umum Android, 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

Linaro Kernel Fungsional Testing (LKFT) tes mengawali berbagai suite tes termasuk kselftest, LTP, VTS, dan CTS pada set arm32 dan arm64 perangkat fisik. Hasil tes baru-baru dapat ditemukan di sini .

Pengujian KernelCI

KernelCI tes build-dan-boot yang dimulai setiap kali patch baru berkomitmen untuk cabang kernel umum. Beberapa ratus konfigurasi build diuji dan di-boot di berbagai papan. Hasil terakhir untuk kernel Android dapat ditemukan di sini .

Pengujian pra-pengiriman dan pascapengiriman Android

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

Pengujian postsubmit Android dilakukan ketika patch baru berkomitmen untuk cabang kernel umum. Dengan memasukkan aosp_kernel sebagai nama cabang parsial, Anda melihat daftar cabang kernel dengan hasil yang tersedia. Misalnya, hasil untuk android-mainline dapat ditemukan di sini .

pengujian 0 hari

0-hari Melakukan pengujian patch-by-Patch pengujian pada semua cabang kernel umum Android saat patch baru berkomitmen. Berbagai pengujian boot, fungsional, dan kinerja dijalankan. Bergabung dengan kelompok masyarakat cros-kernel-buildreports

Matriks uji

Kernel umum Android Rilis Platform Android Suite Tes
Menguasai 11 10 9 (Pai) 8 (Oreo) LKFT KernelCI Pra Kirim Kirim 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 pada Linux arus utama dan bukan pada kernel umum Android. Pengembangan hulu sangat dianjurkan, dan setelah pengembangan diterima di sana, dapat dengan mudah di-backport ke cabang ACK tertentu sesuai kebutuhan. The Android Tim Kernel senang untuk mendukung upaya upstreaming untuk kepentingan ekosistem Android.

Mengirimkan patch untuk Gerrit dan sesuai dengan ini pedoman kontribusi .