Kernel umum Android

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

  • Backport dan pilihan terbaik fungsi upstream yang diperlukan untuk Android fitur
  • 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. Linux mainline digabungkan menjadi android-mainline setiap kali Linus Torvalds memposting kandidat rilis atau rilis. Sebelum 2019, kernel umum Android adalah dibangun dengan meng-clone kernel LTS yang baru dideklarasikan dan menambahkan Patch khusus Android. Proses ini diubah pada tahun 2019 untuk mencabangkan Android baru {i>kernel<i} umum dari android-mainline. Model baru ini menghindari dalam meneruskan port dan menguji patch Android dengan mencapai hasil yang sama secara bertahap. android-mainline menjalani pengujian berkelanjutan yang signifikan, memastikan {i>kernel<i} berkualitas tinggi sejak dipublikasikan.

Saat LTS baru dideklarasikan sebagai upstream, kernel umum yang sesuai akan bercabang dari android-mainline. Hal ini memungkinkan partner memulai proyek sebelum deklarasi versi LTS, dengan menggabungkan dari android-mainline. Setelah cabang {i>kernel<i} umum yang baru dibuat, mitra bisa saja mengubah penggabungan ke cabang baru.

Cabang kernel umum lainnya menerima gabungan reguler dari node terkait Kernel LTS. Penggabungan ini biasanya dilakukan segera setelah rilis LTS diposting. Sebagai misalnya, ketika Linux 6.1.75 diposting, Linux 6.1.75 digabungkan ke dalam {i>kernel<i} (android14-6.1). Partner sangat dianjurkan untuk memperbarui kernel untuk tetap mendapatkan info terbaru dengan LTS dan perbaikan bug khusus Android.

Cabang kernel ACK KMI

Kernel GKI memiliki Antarmuka Modul Kernel yang stabil. KMI memiliki keunikan diidentifikasi oleh versi {i>kernel<i} dan rilis platform Android, sehingga cabang diberi nama ANDROID_RELEASEKERNEL_VERSION. Misalnya, 6.1 GKI {i>kernel<i} untuk Android 14 diberi nama android14-6.1. Sebagai Android 15 (eksperimental AOSP), kernel GKI android15-6.6 diperkenalkan.

Menampilkan dan meluncurkan kernel

Sebelum Android 15 (eksperimental AOSP), salah satu dari tiga kernel terbaru dapat digunakan untuk peluncuran perangkat. Dimulai dengan Android 15 (eksperimental AOSP), dua versi kernel terbaru ini dapat digunakan untuk peluncuran perangkat. {i>Kernel<i} peluncuran untuk Android 15 (Eksperimental AOSP) adalah android15-6.6 dan android14-6.1.

Karena upgrade kernel tidak diperlukan saat mengupdate platform {i>kernel<i} yang tidak memiliki fitur terbaru untuk rilis platform bisa masih digunakan untuk meluncurkan perangkat. Oleh karena itu, {i>kernel<i} yang dirancang untuk Android 14, seperti android14-6.1, dapat digunakan di perangkat bahkan setelah mengupgrade rilis platform ke Android 15 (Eksperimental AOSP).

Rilis platform Android Meluncurkan kernel Kernel fitur
Android 15 (Eksperimental AOSP) (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.101
android14-6.1
android14-5.15
Android 13 (2022) android13-5.15
android13-5.10
android12-5.101
android12-5.41
android11-5.41
android13-5.15
android13-5.10
Android 12 (2021) android12-5.10
android12-5.4
android11-5.41
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 Pembatasan tambahan mungkin berlaku jika BSP terkait memiliki telah diupdate untuk rilis platform. Secara lebih umum, Nomor Rilis Android dari {i>kernel<i} harus lebih tinggi dari atau sama dengan versi FCM target. Lihat Objek Antarmuka Vendor - cocokkan cabang kernel untuk mengetahui detailnya.

Hierarki kernel umum

Cabang dari android-mainline

Tingkat atas hierarki {i>kernel<i} 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 android14-6.1 bercabang dari android-mainline pada tahun 2022. Pada tahun 2023, ketika LTS berikutnya dinyatakan, android15-6.6 bercabang dari android-mainline.

Seperti ditunjukkan dalam Gambar 1, setiap versi {i>kernel<i} dapat menjadi dasar untuk dua {i>kernel<i} GKI. Misalnya, kedua kernel v5.15 adalah android13-5.15 dan android14-5.15, keduanya merupakan {i>kernel<i} fitur untuk rilis platform masing-masing. Ini itu juga berlaku untuk 5.10; android12-5.10 dibuat saat LTS dideklarasikan dan android13-5.10 bercabang dari android12-5.10 pada kernel memberikan {i>milestone<i} lengkap pada Musim Semi 2021 untuk memungkinkan pengembangan fitur Android 13. Dimulai dengan Android 15 (AOSP eksperimental) (2024), hanya ada satu kernel GKI baru per versi kernel (tidak ada kernel android15-6.1).

Siklus proses cabang ACK KMI

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

6.6 Siklus proses cabang ACK KMI

Gambar 2. 6.6 Siklus proses cabang ACK KMI

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

Setiap siklus cabang ACK KMI melalui tiga fase ditunjukkan pada Gambar 2 oleh warna yang berbeda di setiap cabang. Seperti yang ditunjukkan, LTS digabungkan secara berkala terlepas fase ini.

Fase pengembangan

Saat dibuat, cabang ACK KMI memasuki fase pengembangan (dilabeli sebagai dev di Gambar 2), dan menerima kontribusi fitur untuk Android berikutnya untuk rilis platform kami. Pada Gambar 2, android15-6.6 dibuat saat 6.6 dibuat yang dideklarasikan sebagai kernel LTS upstream baru.

Fase stabilisasi

Ketika cabang ACK KMI dinyatakan fitur lengkap, maka masuk ke fase stabilisasi (dilabeli sebagai stabil pada Gambar 2). Fitur partner dan perbaikan bug masih diterima, tetapi pelacakan KMI diaktifkan untuk mendeteksi perubahan yang mempengaruhi antarmuka. Pada fase ini, perubahan yang dapat menyebabkan gangguan KMI diterima dan definisi KMI diperbarui sesuai ritme yang telah ditentukan (biasanya setiap dua minggu). Lihat Ringkasan GKI untuk informasi lebih lanjut tentang pemantauan KMI.

Fase pembekuan KMI

Sebelum rilis platform baru dikirimkan ke AOSP, cabang ACK KMI akan dibekukan dan tetap beku selama masa cabang. Artinya, tidak Perubahan yang dapat menyebabkan gangguan pada KMI diterima kecuali jika ada masalah keamanan serius yang teridentifikasi yang tidak dapat dimitigasi tanpa mempengaruhi KMI yang stabil. Untuk menghindari KMI kerusakan, beberapa patch yang digabungkan dari LTS mungkin dimodifikasi atau dihapus jika tidak diperlukan untuk perangkat Android.

Jika cabang ACK KMI dibekukan, perbaikan bug dan fitur partner dapat diterima selama {i>kernel<i} umum KMI yang ada tidak rusak. KMI dapat diperpanjang dengan simbol baru yang diekspor asalkan 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 kolom ke struktur yang digunakan oleh antarmuka KMI {i>kernel<i} umum 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 pakai {i>kernel<i} GKI, kompatibilitas mundur dengan ruang pengguna adalah dipelihara sehingga {i>kernel<i} dapat digunakan dengan aman untuk platform Android perangkat yang diluncurkan. Pengujian berkelanjutan dengan rilis sebelumnya memastikan bahwa kompatibilitas tetap dipertahankan. Dalam Gambar 2, android15-6.6 kernel dapat digunakan untuk perangkat Android 15 (eksperimental AOSP) dan yang lebih baru perangkat. Karena rilis platform Android kompatibel dengan versi sebelumnya, kernel android14-6.1 dapat digunakan untuk perangkat Android 15 (eksperimental AOSP) baik untuk peluncuran maupun upgrade.

Nomor pembuatan KMI

Jika ada penggabungan LTS selama fase stabilisasi atau masalah keamanan atau peristiwa lain setelah ini yang membutuhkan {i> patch<i} perubahan KMI agar dapat diterima, Nomor pembuatan kmI yang direkam di build.config.common bertambah. Tujuan 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 pembuatan KMI berubah, {i>kernel<i} tidak kompatibel dengan modul vendor yang sesuai dengan generasi KMI sebelumnya, jadi modulnya harus dibangun ulang dan diupdate secara sinkron dengan {i>kernel<i}. Setelah pembekuan KMI, pembuatan KMI berubah diperkirakan akan sangat jarang.

Kompatibilitas antar-kernel

Persyaratan kompatibilitas antar {i>kernel<i} dalam kelompok LTS yang sama adalah berubah dimulai dengan {i> kernel<i} GKI yang baru.

Kernel GKI

Kernel GKI mempertahankan kompatibilitas mundur dengan semua platform Android rilis yang mendukung versi {i>kernel<i}. Selain itu, platform Android rilis kompatibel dengan {i> kernel<i} GKI dari rilis sebelumnya. Namun Anda dapat dengan aman menggunakan {i>kernel<i} android14-6.1 yang dikembangkan untuk Android 14 (2023) di perangkat yang menjalankan Android 15 (Eksperimental AOSP) (2024). Kompatibilitas diverifikasi melalui pengujian VTS dan CTS secara kontinu dari {i>kernel<i} GKI dengan semua rilis yang didukung.

KMI stabil sehingga {i>kernel<i} dapat diperbarui tanpa memerlukan {i>rebuild<i} modul {i>kernel<i} pada {i>image<i} vendor.

Kompatibilitas KMI tidak dipertahankan di antara {i>kernel<i} GKI yang berbeda. Jadi, misalnya, kernel android14-6.1 tidak dapat diganti dengan android15-6.6 {i>kernel<i} tanpa membangun ulang semua modul.

Kernel GKI hanya didukung untuk rilis awal dan selanjutnya. Fitur tersebut tidak didukung untuk rilis lama. Jadi Kernel android15-6.6 tidak didukung untuk perangkat yang berjalan Android 14 (2023).

Matriks kompatibilitas

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

Rilis platform Android Kernel yang didukung untuk upgrade Kernel yang didukung untuk peluncuran
Android 15 (Eksperimental AOSP) (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 laporan Android Buletin Keamanan yang relevan dengan ACK.

ACK mungkin didukung lebih lama dari kernel stabil upstream terkait di kernel.org. Dalam hal ini, Google memberikan dukungan yang diperpanjang hingga tanggal akhir siklus proses (EOL) yang tercantum dalam bagian. Ketika {i>kernel<i} di-EOL, mereka tidak lagi didukung oleh Google dan perangkat yang menjalankannya dianggap rentan.

Dimulai dengan {i>kernel<i} 6.6, masa pakai dukungan untuk {i>kernel<i} stabil adalah 4 tahun.

Tabel ini menunjukkan masa aktif ACK yang didukung:

Cabang ACK Tanggal
peluncuran
Dukungan
sepanjang waktu
(tahun)
EOL
Android-4.19-stabil 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
Android 13-5.10 2020-12-13 6 2027-07-01
Android 13-5.15 2021-10-31 6 2028-07-01
Android 14-5.15 2021-10-31 6 2028-07-01
Android 14-6.1 2022-12-11 6 2029-07-01
Android 15-6.6 2023-10-29 4 2028-07-01

Pengujian kernel umum

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

Uji Fungsional Kernel Linux

Uji Fungsional Kernel Linux (LKFT) tes memulai berbagai rangkaian tes termasuk kselftest, LTP, VTS, dan CTS pada satu set perangkat yaitu arm32 dan arm64 fisik. Hasil pengujian terbaru dapat ditemukan di sini.

Pengujian KernelCI

Pengujian build dan booting KernelCI dimulai setiap kali {i>patch<i} baru berkomitmen ke cabang {i>kernel<i} umum. Beberapa ratusan konfigurasi build diuji dan di-{i>booting<i} di berbagai board. Terbaru hasil untuk kernel Android dapat ditemukan di sini.

Pengujian pra-pengiriman dan pasca-pengiriman Android

Pengujian pra-pengiriman digunakan untuk mencegah kegagalan masuk ke dalam Kernel umum Android. Ringkasan hasil tes dapat ditemukan di 'Pemeriksaan' {i>tab <i}dari perubahan kode di {i> kerrit kernel<i} umum Android.

Pengujian pasca-pengiriman Android dilakukan pada build baru yang dipublikasikan di cabang kernel umum Android ketika patch baru di-commit ke cabang kernel umum Android di ci.android.com. Dengan masuk aosp_kernel sebagai nama cabang parsial 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 prapengiriman untuk cabang kernel Android. Misalnya, konfigurasi berikut dalam 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-day melakukan pengujian patch-by-patch di semua cabang {i>kernel<i} umum Android ketika patch baru di-commit. Bervariasi proses {i>booting<i}, fungsional, dan {i>performa<i} dijalankan. Bergabung dengan grup publik cros-kernel-buildreports

Matriks uji

Kernel umum Android Rilis Platform Android Suite Pengujian
Utama 15 14 13 12 11 10 LKFT {i>KernelCI<i} Pra-Kirim Kirim Postingan 0-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 dan bukan di Kernel umum Android. Pengembangan hulu sangat dianjurkan, dan setelah pengembangan aplikasi diterima di sana, maka dapat dengan mudah di-{i>backport<i} ke ACK tertentu sesuai kebutuhan. Tim Kernel Android dengan senang hati mendukung upaya upstreaming untuk kepentingan ekosistem Android.

Mengirim patch ke Gerrit dan mematuhi panduan kontribusi.