Kernel umum AOSP (juga dikenal sebagai kernel umum Android atau ACK) adalah downstream kernel kernel.org dan menyertakan patch yang menarik bagi komunitas Android yang belum digabungkan ke dalam kernel utama atau Long Term Supported (LTS). Patch ini dapat mencakup:
- Backport dan pilihan terbaik fungsi upstream yang diperlukan untuk fitur Android
- 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. Mainline
Linux digabungkan ke android-mainline
setiap kali Linus Torvalds memposting
rilis atau kandidat rilis. Sebelum tahun 2019, kernel umum Android
dibuat dengan meng-clone kernel LTS yang baru saja dideklarasikan dan menambahkan
patch khusus Android. Proses ini berubah pada tahun 2019 untuk membuat cabang 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 hari pertama dipublikasikan.
Saat LTS baru dideklarasikan di upstream, kernel umum yang sesuai akan bercabang
dari android-mainline
. Hal ini memungkinkan partner memulai project sebelum
deklarasi versi LTS, dengan menggabungkan dari android-mainline
. Setelah
cabang kernel umum baru dibuat, partner dapat mengubah sumber
penggabungan ke cabang baru dengan lancar.
Cabang kernel umum lainnya menerima penggabungan reguler dari
kernel LTS terkait.
Penggabungan ini biasanya dilakukan segera setelah rilis LTS diposting. Misalnya, saat Linux 6.1.75 diposting, kernel tersebut digabungkan ke kernel umum
6.1 (android14-6.1
). Partner sangat dianjurkan untuk
mengupdate kernel mereka agar tetap mendapatkan 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 diberi nama
ANDROID_RELEASE
-KERNEL_VERSION
.
Misalnya, kernel GKI
6.1 untuk Android 14 diberi nama android14-6.1
. Untuk
Android 15, android15-6.6
kernel GKI
diperkenalkan.
Menampilkan dan meluncurkan kernel
Sebelum Android 15, salah satu dari tiga kernel terbaru
dapat digunakan untuk peluncuran perangkat. Mulai
Android 15, dua versi kernel terbaru dapat
digunakan untuk peluncuran perangkat. Kernel peluncuran untuk
Android 15 adalah android15-6.6
dan android14-6.1
.
Karena upgrade kernel tidak diperlukan saat mengupdate 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 14, seperti android14-6.1
, dapat digunakan di
perangkat bahkan setelah mengupgrade rilis platform ke
Android 15.
Rilis platform Android | Meluncurkan kernel | Kernel fitur |
---|---|---|
Android 15 (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.10
|
android14-6.1
android14-5.15
|
Android 13 (2022) |
android13-5.15
android13-5.10
android12-5.10
android12-5.4
android11-5.4
|
android13-5.15
android13-5.10
|
Android 12 (2021) |
android12-5.10
android12-5.4
android11-5.4
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 Batasan tambahan mungkin berlaku jika BSP terkait telah diperbarui untuk rilis platform. Secara lebih umum, nomor Rilis Android kernel harus lebih tinggi atau sama dengan versi FCM target. Lihat Objek Antarmuka Vendor - mencocokkan cabang kernel untuk mengetahui detailnya. |
Hierarki kernel umum
Cabang dari android-mainline
Tingkat teratas hierarki kernel umum ditunjukkan dalam Gambar 1.
Gambar 1. Membuat kernel umum dari kernel Android-mainline
Perhatikan bahwa kernel umum Android baru android14-6.1
di-branch dari
android-mainline
pada tahun 2022. Pada tahun 2023, saat LTS berikutnya dideklarasikan,
android15-6.6
di-branch dari android-mainline
.
Seperti yang ditunjukkan pada Gambar 1, setiap versi kernel dapat menjadi dasar untuk dua kernel GKI.
Misalnya, dua kernel v5.15 adalah android13-5.15
dan android14-5.15
,
yang keduanya adalah kernel fitur untuk rilis platform masing-masing. Hal ini
juga berlaku untuk 5.10; android12-5.10
dibuat saat LTS
dideklarasikan dan android13-5.10
bercabang dari android12-5.10
pada tonggak pencapaian
lengkap fitur kernel pada Musim Semi 2021 untuk memungkinkan pengembangan fitur untuk
Android 13. Mulai Android
15 (2024), hanya ada
satu kernel GKI baru per versi kernel (tidak ada kernel android15-6.1
).
Siklus proses cabang ACK KMI
Siklus proses cabang KMI ACK ditampilkan di bawah pada Gambar 2.
Gambar 2. Siklus proses cabang ACK KMI 6.6
Untuk memperjelas proses pengembangan dan siklus proses cabang, Gambar 2 berfokus pada cabang KMI ACK untuk 6.6.
Setiap cabang ACK KMI siklus melalui tiga fase yang ditunjukkan pada Gambar 2 dengan warna yang berbeda di setiap cabang. Seperti yang ditunjukkan, LTS digabungkan secara berkala terlepas dari fasenya.
Fase pengembangan
Saat dibuat, cabang KMI ACK akan memasuki fase pengembangan (diberi label sebagai
dev pada Gambar 2), dan terbuka untuk kontribusi fitur untuk rilis platform
Android berikutnya. Pada Gambar 2, android15-6.6
dibuat saat 6.6
dideklarasikan sebagai kernel LTS upstream baru.
Fase stabilisasi
Saat cabang KMI ACK dideklarasikan sebagai fitur yang lengkap, cabang tersebut akan memasuki fase stabilisasi (diberi label sebagai stabil pada Gambar 2). Fitur partner dan perbaikan bug masih diterima, tetapi pelacakan KMI diaktifkan untuk mendeteksi perubahan apa pun yang memengaruhi antarmuka. Pada fase ini, perubahan yang menyebabkan gangguan KMI diterima dan definisi KMI diperbarui sesuai ritme yang telah ditentukan (biasanya setiap dua minggu). Lihat ringkasan GKI untuk mengetahui detail tentang pemantauan KMI.
Fase pembekuan KMI
Sebelum rilis platform baru didorong ke AOSP, cabang KMI ACK akan dibekukan dan tetap dibekukan selama masa aktif cabang. Artinya, tidak ada perubahan yang merusak KMI yang akan diterima kecuali jika masalah keamanan serius teridentifikasi yang tidak dapat dimitigasi tanpa memengaruhi KMI yang stabil. Untuk menghindari kerusakan KMI, beberapa patch yang digabungkan dari LTS dapat diubah atau dihapus jika perbaikan tidak diperlukan untuk perangkat Android.
Saat cabang ACK KMI dibekukan, perbaikan bug dan fitur partner dapat diterima selama kernel umum KMI yang ada tidak rusak. KMI dapat diperpanjang dengan simbol baru yang diekspor selama antarmuka yang terdiri dari KMI saat ini tidak terpengaruh. Saat antarmuka baru ditambahkan ke KMI, antarmuka tersebut akan langsung menjadi stabil dan tidak dapat rusak oleh perubahan pada masa mendatang.
Misalnya, perubahan yang menambahkan kolom 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);
Selama masa aktif kernel GKI, kompatibilitas mundur dengan ruang pengguna
dipertahankan sehingga kernel dapat digunakan dengan aman untuk rilis platform
Android yang digunakan untuk meluncurkan perangkat. Pengujian berkelanjutan dengan rilis sebelumnya
memastikan kompatibilitas tetap terjaga. Jadi, dalam Gambar 2, kernel
android15-6.6
dapat digunakan untuk perangkat Android 15 dan perangkat
yang lebih baru. Karena rilis platform Android
juga kompatibel dengan versi sebelumnya, kernel android14-6.1
dapat digunakan
untuk perangkat Android 15 baik untuk peluncuran maupun upgrade.
Nomor pembuatan KMI
Jika ada penggabungan LTS selama fase stabilisasi atau masalah keamanan atau
peristiwa lain setelahnya yang mengharuskan patch yang mengubah KMI diterima, nomor pembuatan KMI yang dicatat di build.config.common
akan bertambah. 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 generasi KMI berubah, kernel tidak kompatibel dengan modul vendor yang sesuai dengan generasi KMI sebelumnya, sehingga modul harus di-build ulang dan diupdate secara sinkron dengan kernel. Setelah KMI dibekukan, perubahan generasi KMI diperkirakan akan sangat jarang terjadi.
Kompatibilitas antar-kernel
Persyaratan kompatibilitas antara kernel dalam keluarga LTS yang sama akan berubah mulai dari 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 menggunakan kernel android14-6.1
yang dikembangkan untuk
Android 14 (2023) dengan aman di perangkat yang menjalankan
Android 15 (2024). Kompatibilitas diverifikasi melalui
pengujian VTS dan CTS berkelanjutan pada kernel GKI dengan semua rilis yang didukung.
KMI stabil sehingga kernel dapat diupdate tanpa memerlukan pembuatan ulang modul kernel dalam image vendor.
Kompatibilitas KMI tidak dipertahankan di antara
kernel GKI yang berbeda. Jadi,
misalnya, kernel android14-6.1
tidak dapat diganti dengan kernel
android15-6.6
tanpa mem-build ulang semua modul.
Kernel GKI hanya didukung untuk rilis awal dan selanjutnya.
Fitur ini tidak didukung untuk rilis lama. Jadi,
kernel android15-6.6
tidak didukung untuk perangkat yang menjalankan
Android 14 (2023).
Matriks kompatibilitas
Tabel ini menunjukkan versi kernel yang didukung dan diuji dengan setiap rilis platform Android.
Rilis platform Android | Kernel yang didukung untuk upgrade | Kernel yang didukung untuk peluncuran |
---|---|---|
Android 15 (2024) |
android15-6.6
|
android15-6.6
|
Android 14 (2023) |
android14-6.1
|
android14-6.1
|
Android 13 (2022) |
android13-5.15
|
android13-5.15
|
Android 12 (2021) |
android12-5.10
|
android-4.19-stable
|
Android 11 (2020) |
android11-5.4
|
android11-5.4
|
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 Buletin Keamanan Android bulanan yang relevan dengan ACK.
ACK mungkin didukung lebih lama daripada kernel stabil upstream yang sesuai di kernel.org. Dalam hal ini, Google memberikan dukungan yang diperpanjang hingga tanggal akhir siklus proses (EOL) yang ditampilkan di bagian ini. Jika di-EOL, kernel tidak lagi didukung oleh Google dan perangkat yang menjalankannya dianggap rentan.
Mulai kernel 6.6, masa aktif dukungan untuk kernel stabil adalah 4 tahun.
Tabel ini menunjukkan masa aktif ACK yang didukung:
Cabang ACK | Tanggal peluncuran |
Dukungan sepanjang waktu (tahun) |
EOL |
---|---|---|---|
android-4.19-stable | 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 |
android13-5.10 | 2020-12-13 | 6 | 2027-07-01 |
android13-5.15 | 2021-10-31 | 6 | 2028-07-01 |
Android 14-5.15 | 2021-10-31 | 6 | 2028-07-01 |
android14-6.1 | 2022-12-11 | 6 | 2029-07-01 |
android15-6.6 | 2023-10-29 | 4 | 2028-07-01 |
Pengujian kernel umum
Kernel umum diuji dengan beberapa sistem CI selain pengujian downstream oleh vendor.
Pengujian Fungsional Kernel Linux
Pengujian Linux Kernel Functional Test (LKFT) memulai berbagai rangkaian pengujian termasuk kselftest, LTP, VTS, dan CTS pada serangkaian perangkat arm32 dan arm64 fisik. Hasil pengujian terbaru dapat ditemukan di sini.
Pengujian KernelCI
Pengujian build-and-boot KernelCI dimulai setiap kali patch baru di-commit ke cabang kernel umum. Beberapa ratus konfigurasi build diuji dan di-booting di berbagai board. Hasil terbaru untuk kernel Android dapat ditemukan di sini.
Pengujian pra-pengiriman dan pasca-pengiriman Android
Pengujian pra-pengiriman digunakan untuk mencegah kegagalan dimasukkan ke dalam kernel umum Android. Ringkasan hasil pengujian dapat ditemukan di tab 'Pemeriksaan' dari perubahan kode di gerrit kernel umum Android.
Pengujian pasca-pengiriman Android dilakukan
pada build baru yang dipublikasikan di cabang kernel umum Android saat patch baru di-commit ke cabang kernel umum Android di ci.android.com. Dengan memasukkan
aosp_kernel
sebagai nama cabang sebagian 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 pra-pengiriman untuk cabang kernel Android. Misalnya, mengikuti konfigurasi di test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING akan mengaktifkan vts_kernel_proc_file_api_test sebagai pengujian pra-kirim di check-in kode kernel umum Android.
{
"kernel-presubmit": [
{
"name": "vts_kernel_proc_file_api_test"
}
]
}
Pengujian zero day
Pengujian 0-day melakukan pengujian patch demi patch di semua cabang kernel umum Android saat patch baru di-commit. Berbagai pengujian booting, fungsional, dan performa dijalankan. Bergabung dengan grup publik cros-kernel-buildreports
Matriks pengujian
Kernel umum Android | Rilis Platform Android | Suite Pengujian | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Utama | 15 | 14 | 13 | 12 | 11 | 10 | LKFT | KernelCI | Pra-Kirim | Setelah Kirim | zero day | |
android-mainline
|
✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android15-6.6
|
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android14-6.1
|
✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android13-5.15
|
✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10
|
✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android-4.19-stable
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Berkontribusi pada kernel umum Android
Umumnya, pengembangan fitur harus dilakukan di Linux utama, bukan di kernel umum Android. Pengembangan upstream 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 manfaat ekosistem Android.
Kirim patch ke Gerrit dan sesuaikan dengan pedoman kontribusi ini.