Sejak Android 5.0, pengoperasian stack jaringan Android yang tepat di kernel Linux memerlukan sejumlah commit yang baru-baru ini di-upstream atau belum di-upstream. Tidak mudah untuk memverifikasi fungsi kernel yang diperlukan secara manual atau melacak commit yang tidak ada, sehingga tim Android membagikan pengujian yang digunakan untuk memastikan kernel berperilaku seperti yang diharapkan.
Alasan untuk menjalankan pengujian
Pengujian ini ada karena tiga alasan utama:
- Versi kernel Linux yang tepat yang digunakan di perangkat biasanya khusus perangkat, dan sulit untuk mengetahui apakah kernel berfungsi dengan benar tanpa menjalankan pengujian.
- Men-forward-port dan men-back-port patch kernel ke versi kernel yang berbeda atau hierarki perangkat yang berbeda dapat menyebabkan masalah halus yang mungkin tidak dapat ditemukan tanpa menjalankan pengujian.
- Fitur jaringan baru mungkin memerlukan fungsi kernel baru atau perbaikan bug kernel.
Jika pengujian tidak lulus, stack jaringan perangkat akan berperilaku tidak benar, sehingga menyebabkan bug konektivitas yang terlihat oleh pengguna (seperti terputusnya jaringan Wi-Fi). Perangkat kemungkinan juga akan gagal dalam pengujian Android Compatibility Test Suite (CTS).
Menggunakan pengujian
Pengujian menggunakan Linux Mode Pengguna untuk mem-booting kernel sebagai proses di komputer host Linux. Lihat Membangun Lingkungan Build untuk mengetahui versi sistem operasi yang sesuai. Framework pengujian unit mem-booting kernel dengan image disk yang sesuai dan menjalankan pengujian dari sistem file host. Pengujian ditulis dalam Python dan menggunakan antarmuka TAP untuk menjalankan perilaku kernel dan API soket.
Mengompilasi kernel untuk ARCH=um
Agar pengujian dapat berjalan,
kernel harus dikompilasi untuk ARCH=um SUBARCH=x86_64
. Ini adalah
arsitektur yang didukung baik upstream maupun dalam hierarki kernel Android umum
(seperti android-4.4
). Namun, terkadang kernel
perangkat tidak dikompilasi dalam mode ini karena hierarki perangkat berisi
kode khusus perangkat atau 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
merupakan #ifdef
pada opsi konfigurasi yang mengontrol fitur
tertentu yang relevan dengan kode. Jika tidak ada opsi konfigurasi tersebut, masukkan
kode khusus hardware di dalam blok #ifndef CONFIG_UML
.
Secara
umum, memperbaiki hal ini adalah tanggung jawab penyedia hierarki kernel
(seperti vendor chipset atau SoC). Kami bekerja sama dengan OEM dan vendor untuk memastikan
kernel saat ini dan mendatang dikompilasi untuk ARCH=um
SUBARCH=x86_64
tanpa memerlukan perubahan apa pun.
Menjalankan pengujian
Pengujiannya ada di kernel/tests/net/test
.
Sebaiknya pengujian dijalankan dari AOSP utama karena
pengujian tersebut adalah yang terbaru; dalam beberapa kasus, fitur kernel yang diperlukan untuk
operasi yang tepat dalam rilis Android tertentu belum memiliki cakupan pengujian penuh
dalam rilis tersebut. Untuk mengetahui informasi tentang cara menjalankan pengujian, lihat file README
pengujian jaringan kernel. Pada dasarnya, dari bagian atas hierarki kernel, jalankan:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
Lulus pengujian
File sumber Python pengujian jaringan kernel
berisi komentar yang menentukan commit kernel yang diketahui
diperlukan untuk lulus pengujian. Pengujian harus lulus di hierarki kernel umum - semua
cabang kernel umum android-4.4
dan yang lebih tinggi - dalam
project
kernel/common
di AOSP. Oleh karena itu, lulus pengujian pada kernel hanyalah masalah
penggabungan yang terus-menerus dari cabang kernel umum yang sesuai.
Kontribusi
Laporkan masalah
Laporkan masalah apa pun terkait pengujian jaringan kernel di issue tracker Android dengan label Component-Networking.
Mendokumentasikan commit dan menambahkan pengujian
Laporkan masalah seperti yang dijelaskan di atas, dan jika memungkinkan, upload perubahan untuk memperbaiki masalah tersebut, jika:
- Pengujian tidak meneruskan hierarki kernel umum
- Anda menemukan commit yang diperlukan yang tidak disebutkan dalam komentar sumber,
- Agar pengujian lulus di kernel upstream, diperlukan perubahan besar
- Anda yakin bahwa pengujian terlalu ditentukan, atau pengujian gagal pada kernel mendatang
- Anda ingin menambahkan lebih banyak pengujian atau cakupan ke pengujian yang ada.