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