Sejak Android 5.0, operasi tumpukan jaringan Android di Linux dengan benar kernel memerlukan sejumlah commit yang di-upstream baru-baru ini atau belum sampai ke hulu. Tidak mudah untuk memverifikasinya secara manual fungsionalitas kernel yang diperlukan atau melacak commit yang hilang, sehingga tim Android membagikan pengujian yang digunakannya untuk memastikan {i>kernel<i} berperilaku seperti yang diharapkan.
Alasan menjalankan pengujian
Pengujian ini dilakukan untuk tiga jenis alasan:
- Versi {i>kernel<i} Linux yang sebenarnya digunakan pada perangkat adalah biasanya perangkat tertentu, dan sulit untuk mengetahui apakah ada {i>kernel<i} berfungsi dengan baik tanpa menjalankan pengujian.
- {i>Forward-porting<i} dan mem-back-port patch {i>kernel<i} ke versi {i>kernel<i} yang berbeda atau hierarki perangkat dapat menimbulkan masalah kecil yang tidak mungkin dikenali tanpa menjalankan pengujian.
- Fitur jaringan baru mungkin memerlukan fungsi kernel atau bug kernel baru sejumlah perbaikan.
Jika pengujian tidak berhasil, stack jaringan perangkat berperilaku tidak benar, yang menyebabkan bug konektivitas yang terlihat oleh pengguna (seperti jatuh jaringan Wi-Fi). Perangkat mungkin juga akan gagal dalam Pengujian Kompatibilitas Android Pengujian Suite (CTS).
Menggunakan pengujian
Pengujian menggunakan User-Mode Linux untuk mem-booting {i>kernel<i} sebagai proses pada mesin {i>host<i} Linux. Lihat Menetapkan Lingkungan Build untuk versi sistem operasi yang sesuai. Framework pengujian unit mem-booting kernel dengan disk image yang sesuai dan menjalankan pengujian dari sistem file {i>host<i}. Pengujian ditulis dalam Python dan menggunakan antarmuka TAP untuk perilaku kernel olahraga dan socket API.
Kompilasi kernel untuk ARCH=um
Agar pengujian dapat berjalan,
kernel harus dikompilasi untuk ARCH=um SUBARCH=x86_64
. Ini adalah
mendukung arsitektur upstream dan hierarki kernel Android umum
(misalnya android-4.4
). Tapi terkadang perangkat
{i>kernel<i} tidak dikompilasi dalam mode ini
karena hierarki perangkat berisi
kode khusus perangkat atau kode khusus hardware dalam file umum (misalnya
sys/exit.c
).
Dalam banyak kasus, cukup
memastikan bahwa
kode khusus hardware berada di belakang #ifdef
. Biasanya ini harus
menjadi #ifdef
di opsi konfigurasi yang mengontrol
fitur yang relevan dengan kode. Jika tidak ada pilihan konfigurasi
seperti itu, masukkan
kode khusus hardware di dalam blok #ifndef CONFIG_UML
.
Di beberapa
umum, perbaikan ini harus menjadi tanggung jawab penyedia pohon {i>kernel<i}
(seperti vendor chipset atau SoC). Kami bekerja sama dengan OEM
dan vendor untuk memastikan
kernel saat ini dan yang akan datang dapat dikompilasi untuk ARCH=um
SUBARCH=x86_64
tanpa memerlukan perubahan apa pun.
Menjalankan pengujian
Pengujian akan berlangsung pukul kernel/tests/net/test
.
Sebaiknya pengujian dijalankan dari layanan utama AOSP karena
adalah yang paling baru; dalam beberapa kasus, fitur {i>
kernel<i} diperlukan untuk
operasi yang benar dalam rilis Android tertentu belum memiliki cakupan pengujian penuh
dalam rilis tertentu. Untuk informasi tentang cara menjalankan pengujian, lihat kernel
file README uji jaringan. Pada dasarnya, dari bagian atas hierarki {i>kernel<i} Anda, jalankan:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
Lulus pengujian
Jaringan kernel menguji Python
file sumber berisi komentar yang menentukan commit kernel yang diketahui
yang diperlukan untuk
lulus pengujian. Pengujian harus lulus pohon {i>kernel<i} umum - semua
cabang kernel umum android-4.4
dan yang lebih tinggi - di
kernel/common
project baru di AOSP. Oleh karena itu, lulus pengujian pada {i>
kernel<i} hanya masalah
secara terus-menerus bergabung dari
cabang {i>kernel<i} umum yang sesuai.
Kontribusi
Laporkan masalah
Laporkan masalah apa pun terkait pengujian jaringan kernel di Android issue tracker dengan alat Component-Networking label.
Mendokumentasikan commit dan menambahkan pengujian
Laporkan masalah seperti yang dijelaskan di atas, dan jika mungkin, unggah perubahan untuk memperbaiki masalah tersebut, jika:
- Pengujian tidak lulus hierarki kernel umum
- Anda menemukan commit yang diperlukan yang tidak disebutkan dalam komentar sumber,
- Agar pengujian dapat lulus kernel upstream, diperlukan perubahan besar
- Anda yakin bahwa pengujian terlalu tinggi, atau pengujian akan gagal pada masa mendatang {i>kernel<i}
- Anda ingin menambahkan lebih banyak pengujian atau cakupan yang lebih banyak ke yang ada pengujian.