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