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_RELEASE
—KERNEL_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.
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.
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
|
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 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
|
✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
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 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.