Triển khai USB HAL

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 daemon USB gốc để có độ tin cậy về mã và cấu hình 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 sử 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, 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). Việc chuyển sang thiết kế Lớp trừu tượng phần cứng (HAL) mang lại kết quả triển khai rõ ràng hơn nhiều, giải quyết được các vấn đề sau:

  1. Các hoạt động như ghi vào các nút sysfs kernel có thể không thành công nhưng không được truyền trở lại mã khung đặt trình kích hoạt thuộc tính. Kết quả là, các khung công tác 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.
  2. tập lệnh init có số lượng thao tác hạn chế có thể được thực thi.

Bản phát hành Android 12 bổ sung hỗ trợ HAL của Tiện ích USB 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 các sự cố hệ thống. Việc có một daemon gốc để thực hiện cấu hình USB sẽ loại bỏ sự phụ thuộc vào mã khung, do đó, ngay cả khi khung gặp sự cố, USB vẫn chạy.

Theo mô hình Treble cũng được giới thiệu trong Android 8.0, tất cả HAL đều bị cô lập khỏi các dịch vụ Hệ thống và được yêu cầu chạy trong các trình nền riêng của chúng. Điều này giúp loại bỏ yêu cầu phải có một daemon USB độc quyền vì lớp HAL có chức năng tăng gấp đôi như một daemon 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ác 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ị chạy Android 8.0. Việc triển khai mặc định sẽ áp dụng cho 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 loại-c. Những 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.