Các thiết bị chạy Android 12 bằng các phiên bản hạt nhân cao hơn phiên bản 5.4 phải đi kèm với hạt nhân GKI. Để các đối tác có thể truy cập vào DebugFS
trong các bản dựng userdebug trong khi phát triển trên hạt nhân GKI, cấu hình hạt nhân CONFIG_DEBUG_FS
được bật trong defconfig GKI.
Không bao giờ gắn DebugFS
trong bản dựng người dùng cho các thiết bị chạy trên Android 12.
Bản dựng Userdebug có phạm vi kiểm thử tốt hơn so với bản dựng người dùng và được kiểm thử kỹ lưỡng trong suốt chu kỳ phát triển. Kế hoạch sau đây giảm thiểu sự khác biệt giữa hai loại bản dựng liên quan đến quyền truy cập DebugFS
và mang lại các lợi ích sau:
- Ngăn các bản dựng userdebug vô tình phụ thuộc vào
DebugFS
cho chức năng mới - Đảm bảo rằng mọi chức năng hiện có bị hỏng do thiếu DebugFS đều được biết sớm trong chu kỳ phát triển
Quyền truy cập Debugfs trong các bản dựng userdebug được phân loại như sau:
- Khởi chạy tệp
DebugFS
trong quá trình khởi động thiết bị, chẳng hạn như quyền ghi vào tệp trongDebugFS
để bật tính năng thu thập dữ liệu gỡ lỗi. - Tạo báo cáo lỗi: HAL dumpstate đọc các tệp
DebugFS
khiDumpstateBoard()
đượcdumpstate
gọi. Thông tin này sẽ trở thành một phần của báo cáo lỗi. - Kiểm thử và xác thực dành riêng cho thiết bị.
Bảng sau đây mô tả cách hỗ trợ từng danh mục trong số 3 danh mục này trong Android 12. Xin lưu ý rằng nội dung sau đây chỉ áp dụng cho các bản dựng userdebug vì không thể gắn DebugFS
trong các bản dựng dành cho người dùng.
Trường hợp sử dụng | Bản dựng userdebug Android 12 |
---|---|
Khởi chạy tệp DebugFS một lần, trong quá trình khởi động.
Quyền truy cập này chỉ xảy ra một lần trong thời gian khởi động.
|
HAL Dumpstate thực hiện việc này trong quá trình khởi tạo HAL. Để bật tính năng tương tự,
init sẽ gắn DebugFS trong các bản dựng userdebug trước khi HAL khởi chạy.
Init gọi umount() trên DebugFS khi thiết bị đã khởi động xong.
|
Tạo báo cáo lỗi: HAL dumpstate đọc các tệp DebugFS , trở thành một phần của báo cáo lỗi.
|
Do dumpstate HAL thực hiện trong DumpstateBoard() khi được dumpstate gọi (DumpstateDevice.cpp).
Công cụ dumpstate (một phần của khung Android) đảm bảo rằng DebugFS
sẽ được gắn trong quá trình gọi.
|
Kiểm thử và xác thực theo thiết bị cụ thể | Adb root và shell. Gắn DebugFS từ shell adb bằng quyền truy cập gốc1.
|
1Để gắn DebugFS
từ adb shell
bằng quyền truy cập thư mục gốc, hãy sử dụng lệnh sau:
adb shell mount -t debugfs debugfs /sys/kernel/debug
.
Hành động bắt buộc đối với đối tác
Đối tác phải thực hiện những việc sau dựa trên những thay đổi này trong các thiết bị Android 12:
- Thực hiện tất cả các hoạt động khởi chạy thời gian khởi động của các nút
DebugFS
trong quá trình khởi chạy HAL dumpstate. Để biết ví dụ về cách thực hiện việc này, hãy xem phần DNM: Ví dụ về cách khởi chạy thời gian khởi động của tệpDebugFS
. - Không cho phép
DebugFS
truy cập trong thời gian chạy. Các trường hợp ngoại lệ sau đây sẽ được áp dụng:- Tạo báo cáo lỗi (xuất phát từ HAL dumpstate)
- Kiểm thử và xác thực (có thể truy cập bằng
adb root
vàshell
– đảm bảo rằng DebugFS được gắn trước)
Nhà phát triển có thể đặt thuộc tính gỡ lỗi ổn định persist.dbg.keep_debugfs_mounted
để giữ DebugFs
được gắn trong các lần khởi động lại trên bản dựng userdebug và eng.
Các bài kiểm thử tuân thủ GTS đảm bảo rằng hệ thống tệp DebugFS
không được gắn trong các bản dựng của người dùng. Câu lệnh neverallow
của Sepolicy đảm bảo rằng trong các thiết bị chạy trên Android 12 trở lên, các quy trình trái phép sẽ không được cấp quyền truy cập vào DebugFs
.