Sử dụng DebugFS trong Android 12

Thiết bị chạy Android 12 sử dụng nhân hệ điều hành phải có các phiên bản cao hơn phiên bản 5.4 để gửi cùng với nhân GKI. Để các đối tác có thể truy cập vào DebugFS trong bản dựng userdebug trong khi phát triển trên GKI kernel, cấu hình hạt nhân CONFIG_DEBUG_FS sẽ được bật trong defconfig GKI. Không bao giờ gắn kết DebugFS trong bản dựng người dùng cho thiết bị sẽ ra mắt trên Android 12.

Các bản dựng Userdebug có phạm vi kiểm thử tốt hơn so với bản dựng của người dùng và nhận được rất nhiều được thử nghiệm trong suốt chu trình phát triển. Kế hoạch sau đây giúp giảm thiểu sự khác biệt giữa 2 loại bản dựng liên quan đến quyền truy cập DebugFS, và sẽ mang lại những lợi ích sau:

  • Ngăn các bản dựng gỡ lỗi người dùng 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 được biết đến từ đầu trong chu kỳ phát triển

Quyền truy cập Debugfs trong bản dựng userdebug được phân loại là sau:

  1. 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 một tệp trong DebugFS để bật tính năng gỡ lỗi thu thập dữ liệu.
  2. Tạo báo cáo lỗi: HAL dumpstate đọc tệp DebugFS khi DumpstateBoard() được dumpstate gọi. Chiến dịch này sẽ trở thành một phần trong báo cáo lỗi.
  3. Kiểm tra và xác thực theo thiết bị.

Bảng sau đây mô tả cách tương tác của từng loại trong số 3 danh mục này được hỗ trợ trên Android 12. Lưu ý rằng các điều kiện sau chỉ áp dụng cho các bản dựng userdebug vì không thể DebugFS được gắn trong bản dựng người dùng.

Trường hợp sử dụng Bản dựng gỡ lỗi người dùng trên Android 12
Khởi chạy tệp DebugFS một lần trong khi khởi động. Quyền truy cập này chỉ diễn ra một lần trong thời gian khởi động. HAL (Lớp trừu tượng phần cứng) thực hiện việc này trong quá trình khởi chạy HAL. Để bật cùng một chế độ, init 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 DebugFS tệp mà sẽ trở thành một phần của báo cáo lỗi. Được thực hiện bằng dumpstate HAL trong DumpstateBoard() khi được gọi bởi dumpstate (DumpstateDevice.cpp). Công cụ dumpstate (một phần của khung Android) đảm bảo rằng DebugFS gắn kết trong lệnh gọi.
Kiểm thử và xác thực theo thiết bị Adb gốc và shell. Gắn DebugFS từ shell adb bằng quyền truy cập thư mục gốc1.

1Để gắn DebugFS từ adb shell bằng quyền truy cập thư mục gốc, hãy dùng lệnh sau:

adb shell mount -t debugfs debugfs /sys/kernel/debug.

Hành động bắt buộc của đối tác

Đối tác phải thực hiện những nội dung sau đây dựa trên những thay đổi này trong Thiết bị chạy Android 12:

  • Thực hiện tất cả các lần khởi chạy thời gian khởi động của nút DebugFS trong quá trình khởi chạy HAL trạng thái kết xuất. Để biết ví dụ về cách thực hiện việc này, hãy xem Doanh nghiệp kỹ thuật số: Ví dụ về khởi động thời gian khởi động của tệp DebugFS.
  • Không cho phép truy cập vào DebugFS trong thời gian chạy. Sau đây là các trường hợp ngoại lệ áp dụng:
    • Quá trình tạo báo cáo lỗi (bắt nguồn từ lớp trừu tượng phần cứng (HAL) ở trạng thái kết xuất)
    • Thử nghiệm và xác thực (có thể truy cập bằng adb rootshell – đảm bảo rằng DebugFS được gắn trước tiên)

Nhà phát triển có thể đặt thuộc tính gỡ lỗi cố định persist.dbg.keep_debugfs_mounted để duy trì DebugFs gắn kết trên khởi động lại trên các 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 bản dựng người dùng. Câu lệnh Sepolicy neverallow đảm bảo rằng trong các thiết bị chạy trên Android 12 trở lên thì chưa cung cấp các quy trình trái phép truy cập vào DebugFs.