Kernel Umum Android

Kernel umum AOSP (juga dikenal sebagai kernel umum Android atau ACKs ) adalah hilir kernel kernel.org dan menyertakan tambalan yang menarik bagi komunitas Android yang belum digabungkan ke kernel arus utama atau yang Didukung Jangka Panjang (LTS). 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. Mainline Linux digabungkan ke android-mainline setiap kali Linus Torvalds memposting rilis 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 pada tahun 2019 menjadi 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 menjalani pengujian berkelanjutan yang signifikan, model ini memastikan kernel berkualitas tinggi sejak diterbitkan.

Ketika LTS baru dideklarasikan upstream, kernel umum yang sesuai bercabang dari android-mainline . Ini memungkinkan mitra 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 yang terkait. Penggabungan ini biasanya dilakukan segera setelah rilis LTS diposting. Misalnya, ketika Linux 4.19.64 diposkan, ia digabungkan ke dalam kernel umum 4.19 (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.

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-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 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 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.9-q adalah yang terakhir dari cabang makanan 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 makanan penutup untuk rilis platform Android 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 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

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 saat 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 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 GKI 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 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 memutakhirkan rilis platform ke Android 11. Dimulai dengan Android 12, kernel fitur akan lebih sedikit daripada kernel peluncuran untuk membatasi jumlah KMI stabil yang harus didukung.

Rilis platform Android Luncurkan kernel Kernel fitur
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 2
android12-5.4
android12-5.10
android12-5.4
android12-5.10
Android T (percobaan AOSP) (2022) 1 android12-5.4 2
android12-5.10 2
android13-5.10
android13-5.15
android13-5.10
android13-5.15

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

2 Nomor Rilis Android dari kernel harus lebih tinggi atau sama dengan versi FCM target . Lihat Obyek Antarmuka Vendor - cocokkan cabang kernel untuk detailnya.

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 kernel android-mainline

Perhatikan bahwa kernel umum Android baru android12-5.10 bercabang dari android-mainline pada tahun 2020. Pada tahun 2021, ketika LTS berikutnya dideklarasikan, android13-5.15 bercabang dari android-mainline .

Seperti yang ditunjukkan pada Gambar 1, setiap versi kernel adalah dasar untuk dua kernel GKI. 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 ketika LTS dideklarasikan dan android13-5.10 akan bercabang dari android12-5.10 pada pencapaian lengkap fitur kernel pada Musim Semi 2021 untuk memungkinkan pengembangan fitur untuk Android T (eksperimen AOSP).

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 yang berbeda di setiap cabang. Seperti yang ditunjukkan, LTS secara teratur digabungkan terlepas dari fase.

Fase pengembangan

Saat dibuat, cabang ACK 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 ketika 5.10 dideklarasikan sebagai kernel LTS upstream 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 fitur selesai, ia memasuki fase stabilisasi , diberi label sebagai stab pada Gambar 2. Fitur mitra dan perbaikan bug masih diterima, tetapi pelacakan KMI diaktifkan untuk mendeteksi perubahan apa pun yang memengaruhi antarmuka. Pada fase ini, perubahan yang melanggar KMI diterima, tetapi definisi KMI harus diperbarui jika diperlukan. Lihat ikhtisar GKI untuk detail pemantauan KMI.

Fase beku KMI

Sebelum rilis platform baru didorong ke AOSP, cabang ACK KMI dibekukan dan tetap dibekukan selama masa pakai 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 ACK 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 GKI, 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 pada Gambar 2 kernel android12-5.10 dapat digunakan untuk perangkat Android 12 dan perangkat Android T (AOSP eksperimental). Karena rilis platform Android juga kompatibel dengan versi sebelumnya, kernel android12-5.4 dapat digunakan untuk perangkat Android T (percobaan AOSP) baik untuk peluncuran maupun peningkatan.

Saat memasuki fase beku, cabang diberi tag git dengan string versi KMI yang berisi nomor generasi KMI. Misalnya, ketika android11-5.4 dibekukan, itu ditandai dengan string versi KMI 5.4-android11-0 di mana 0 di belakangnya adalah nomor 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. Misalnya, jika perubahan tersebut diterima di android11-5.4 , cabang akan diberi tag dengan versi KMI 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 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 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 dengan aman menggunakan kernel android12-5.4 yang dikembangkan untuk Android 12 di perangkat yang menjalankan Android T (eksperimen AOSP). Kompatibilitas diverifikasi melalui pengujian VTS dan CTS berkelanjutan dari kernel GKI dengan semua rilis yang didukung.

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

Kompatibilitas KMI tidak dipertahankan 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 rilis berikutnya. Mereka tidak didukung untuk rilis yang lebih lama. Jadi kernel android13-5.10 tidak didukung pada perangkat Android 12.

Kernel lama

Kernel pencuci mulut lama ( *-q dan *-stable ) tidak kompatibel ke belakang 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 memutakhirkan 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 dengan setiap rilis platform Android.

Rilis platform Android Kernel yang didukung untuk peningkatan Kernel yang didukung untuk diluncurkan
Android 10 (2019) android-3.18 (EOL)
android-4.4-o (EOL)
android-4.9-o
android-4.4-p
(EOL)
android-4.9-p (EOL)
android-4.14-p (EOL)
android-4.9-q
android-4.14-q
android-4.19-q
Android 11 (2020) android-4.4-o (EOL)
android-4.4-p (EOL)
android-4.9-o (EOL)
android-4.9-p (EOL)
android-4.9-q
android-4.14-p (EOL)
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 (EOL)
android-4.9-p (EOL)
android-4.9-q
android-4.14-p (EOL)
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 yang dikutip dalam Buletin Keamanan Android bulanan 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

Tes 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 di-commit ke cabang kernel umum. Beberapa ratus konfigurasi build diuji dan di-boot di berbagai papan. Hasil terbaru 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 pascapengiriman Android dilakukan saat patch baru di-commit ke cabang kernel umum. Dengan memasukkan aosp_kernel sebagai nama cabang parsial, Anda akan 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 tambalan demi tambalan di semua cabang kernel umum Android saat tambalan baru dilakukan. Berbagai pengujian boot, fungsional, dan kinerja dijalankan. Bergabunglah dengan grup publik cros-kernel-buildreports

matriks uji

Kernel umum Android Rilis Platform Android Suite Tes
Menguasai 12 11 10 9 (Pai) LKFT KernelCI Pra Kirim Kirim Kirim 0-hari
android-mainline
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
android-4.14-q
android-4.9-q

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. Tim Kernel Android dengan senang hati mendukung upaya upstreaming untuk kepentingan ekosistem Android.

Kirim tambalan ke Gerrit dan sesuaikan dengan pedoman kontribusi ini.