Kể từ Android 5.0, để ngăn xếp mạng Android hoạt động đúng cách trên nhân Linux, bạn cần có một số thay đổi gần đây được chuyển lên trên hoặc chưa được chuyển lên trên. Không dễ để xác minh chức năng hạt nhân bắt buộc hoặc theo dõi các thay đổi bị thiếu theo cách thủ công. Vì vậy, nhóm Android sẽ chia sẻ các kiểm thử mà họ sử dụng để đảm bảo hạt nhân hoạt động như mong đợi.
Lý do chạy kiểm thử
Các kiểm thử này tồn tại vì 3 lý do chính:
- Phiên bản chính xác của nhân Linux dùng trên một thiết bị thường dành riêng cho thiết bị đó và khó có thể biết được liệu có nhân nào hoạt động đúng cách hay không nếu không chạy các chương trình kiểm thử.
- Việc chuyển tiếp và điều chỉnh ngược các bản vá nhân cho các phiên bản nhân hoặc cây thiết bị khác nhau có thể gây ra các vấn đề nhỏ mà bạn không thể phát hiện được nếu không chạy các chương trình kiểm thử.
- Các tính năng kết nối mạng mới có thể yêu cầu chức năng hạt nhân mới hoặc bản sửa lỗi hạt nhân.
Nếu các bài kiểm thử không đạt, ngăn xếp mạng của thiết bị sẽ hoạt động không chính xác, gây ra lỗi kết nối mà người dùng có thể nhìn thấy (chẳng hạn như bị ngắt kết nối mạng Wi-Fi). Thiết bị cũng có thể không vượt qua các bài kiểm thử trong Bộ kiểm tra tính tương thích với Android (CTS).
Sử dụng các chương trình kiểm thử
Các chương trình kiểm thử sử dụng User-Mode Linux để khởi động hạt nhân dưới dạng một quy trình trên máy chủ Linux. Hãy xem phần Thiết lập môi trường xây dựng để biết các phiên bản hệ điều hành phù hợp. Khung kiểm thử đơn vị khởi động hạt nhân bằng hình ảnh đĩa thích hợp và chạy các chương trình kiểm thử từ hệ thống tệp máy chủ. Các chương trình kiểm thử được viết bằng Python và sử dụng giao diện TAP để thực thi hành vi của hạt nhân và API ổ cắm.
Biên dịch nhân cho ARCH=um
Để các chương trình kiểm thử chạy, hạt nhân phải biên dịch cho ARCH=um SUBARCH=x86_64
. Đây là một kiến trúc được hỗ trợ cả ở thượng nguồn và trong các cây nhân hệ điều hành Android phổ biến (chẳng hạn như android-4.4
). Tuy nhiên, đôi khi nhân thiết bị không biên dịch ở chế độ này vì cây thiết bị chứa mã dành riêng cho thiết bị hoặc phần cứng trong các tệp phổ biến (ví dụ: sys/exit.c
).
Trong nhiều trường hợp, bạn chỉ cần đảm bảo rằng mã dành riêng cho phần cứng nằm sau #ifdef
. Thông thường, đây phải là #ifdef
trên một tuỳ chọn cấu hình kiểm soát tính năng cụ thể liên quan đến mã. Nếu không có tuỳ chọn cấu hình như vậy, hãy đặt mã dành riêng cho phần cứng bên trong các khối #ifndef CONFIG_UML
.
Nhìn chung, việc khắc phục vấn đề này là trách nhiệm của nhà cung cấp cây nhân kernel (chẳng hạn như nhà cung cấp chipset hoặc SoC). Chúng tôi đang làm việc với các nhà sản xuất thiết bị gốc (OEM) và nhà cung cấp để đảm bảo rằng các nhân hiện tại và trong tương lai sẽ biên dịch cho ARCH=um
SUBARCH=x86_64
mà không cần thay đổi gì.
Chạy kiểm thử
Các chương trình kiểm thử nằm ở kernel/tests/net/test
.
Bạn nên chạy các chương trình kiểm thử từ AOSP chính vì các chương trình này là mới nhất; trong một số trường hợp, các tính năng hạt nhân cần thiết để hoạt động đúng cách trong một bản phát hành Android nhất định chưa có phạm vi kiểm thử đầy đủ trong bản phát hành đó. Để biết thông tin về cách chạy kiểm thử, hãy xem tệp README kiểm thử mạng nhân hệ điều hành. Về cơ bản, từ đầu cây nhân, hãy chạy:
ANDROID_TREE/kernel/tests/net/test/run_net_test.sh all_tests.sh
Đậu bài kiểm thử
Các tệp nguồn Python kiểm thử mạng nhân chứa các nhận xét chỉ định các thay đổi đã cam kết về nhân được biết là cần thiết để vượt qua các bài kiểm thử. Các chương trình kiểm thử phải vượt qua trong cây nhân kernel phổ biến – tất cả các nhánh nhân kernel phổ biến android-4.4
trở lên – trong dự án kernel/common
trong AOSP. Do đó, việc vượt qua các bài kiểm thử trên một hạt nhân chỉ là vấn đề liên tục hợp nhất từ nhánh hạt nhân phổ biến tương ứng.
Đóng góp
Báo cáo vấn đề
Báo cáo mọi vấn đề với kiểm thử mạng nhân trong Công cụ theo dõi lỗi Android bằng nhãn Component-Networking (Thành phần-Mạng).
Ghi lại các thay đổi và thêm kiểm thử
Báo cáo vấn đề như mô tả ở trên và nếu có thể, hãy tải nội dung thay đổi lên để khắc phục vấn đề, nếu:
- Các chương trình kiểm thử không truyền trên các cây nhân kernel phổ biến
- Bạn tìm thấy một thay đổi cần thiết không được đề cập trong các nhận xét nguồn,
- Để kiểm thử thành công trên các nhân cấp trên, bạn cần thực hiện những thay đổi lớn
- Bạn cho rằng các chương trình kiểm thử được chỉ định quá chi tiết hoặc kiểm thử không thành công trên các nhân trong tương lai
- Bạn muốn thêm các bài kiểm thử hoặc tăng phạm vi kiểm thử hiện có.