Bản phát hành Android 8.0 chuyển việc xử lý các lệnh USB ra khỏi tập lệnh init
và vào một trình nền USB gốc để có cấu hình và độ tin cậy của mã tốt hơn. Đối với cấu hình chức năng Tiện ích, tập lệnh init
(trình kích hoạt thuộc tính) được dùng để thực hiện các thao tác tiện ích dành riêng cho thiết bị.
Trong các bản phát hành trước, những cấu hình dành riêng cho thiết bị này được thực hiện thông qua các tập lệnh init
dành riêng cho thiết bị (sử dụng trình kích hoạt thuộc tính). Việc chuyển sang thiết kế Lớp trừu tượng phần cứng (HAL) mang lại một quá trình triển khai rõ ràng hơn nhiều, giúp giải quyết những vấn đề sau:
- Các thao tác như ghi vào các nút sysfs của nhân có thể không thành công nhưng không được truyền ngược lại mã khung đặt trình kích hoạt thuộc tính. Do đó, các khung giả định sai rằng các thao tác đã thành công mặc dù chúng đã thất bại một cách âm thầm.
- Các tập lệnh
init
có một số lượng giới hạn các thao tác có thể được thực thi.
Bản phát hành Android 12 bổ sung tính năng hỗ trợ HAL cho Tiện ích USB cho Mô hình kiểm soát mạng (NCM) và các lệnh gọi API trả về cả số phiên bản HAL và tốc độ USB. Để biết thêm thông tin về các lệnh gọi API có sẵn thông qua HAL USB, hãy xem phần android.hardware.usb
tóm tắt gói.
HAL và Treble
Các tập lệnh init
dành riêng cho thiết bị được dùng để thay thế cho các lớp HAL nhằm thực hiện các thao tác USB dành riêng cho thiết bị. USB (thông qua ADB) là một giao diện chính để gỡ lỗi các vấn đề về hệ thống. Việc có một trình nền gốc để thực hiện cấu hình USB sẽ loại bỏ sự phụ thuộc vào mã khung, vì vậy, ngay cả khi khung gặp sự cố, USB vẫn sẽ chạy.
Theo mô hình Treble cũng được giới thiệu trong Android 8.0, tất cả HAL đều được tách biệt khỏi các dịch vụ Hệ thống và bắt buộc phải chạy trong các trình nền gốc của riêng chúng. Điều này giúp bạn không cần phải có một trình nền USB độc quyền vì lớp HAL cũng hoạt động như một trình nền USB.
Việc triển khai HAL mặc định sẽ xử lý tất cả các thiết bị trước Android 8.0. Do đó, sẽ không có hoạt động cụ thể nào cho thiết bị đối với các thiết bị trước Android 8.0. Android 8.0 sử dụng giao diện HAL để truy vấn trạng thái của các cổng USB và thực hiện việc hoán đổi vai trò dữ liệu và vai trò nguồn.
Triển khai
Bạn cần triển khai giao diện HAL USB mới trên mọi thiết bị chạy Android 8.0.
Quy trình triển khai mặc định sẽ xử lý các thiết bị chạy phiên bản trước Android 8.0. Quy trình triển khai mặc định là đủ nếu thiết bị dùng lớp dual_role_usb
để báo cáo trạng thái cổng loại C. Có thể cần những thay đổi nhỏ trong các tập lệnh USB dành riêng cho thiết bị để chuyển quyền sở hữu các nút typc-c cho hệ thống.