Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

ConfigStore HAL

Android 8.0 chia tách các khối hệ điều hành Android vào generic ( system.img ) và phần cứng cụ thể ( vendor.imgodm.img ) phân vùng. Do sự thay đổi này, quá trình biên dịch có điều kiện phải được gỡ bỏ khỏi các mô-đun được cài đặt vào phân vùng hệ thống và các mô-đun đó phải xác định cấu hình của hệ thống trong thời gian chạy (và hoạt động khác nhau tùy thuộc vào cấu hình đó).

ConfigStore HAL cung cấp một tập hợp các API để truy cập các mục cấu hình chỉ đọc được sử dụng để định cấu hình khung Android. Trang này mô tả thiết kế của ConfigStore HAL (và lý do tại sao các thuộc tính hệ thống không được sử dụng cho mục đích này); các trang khác một cách chi tiết phần này giao diện HAL , thực hiện dịch vụ , và việc sử dụng client-side , tất cả sử dụng surfaceflinger làm ví dụ. Để được trợ giúp với các lớp giao diện ConfigStore, xem thêm lớp giao diện và Items .

Tại sao không sử dụng thuộc tính hệ thống?

Chúng tôi đã xem xét sử dụng các thuộc tính hệ thống nhưng phát hiện ra một số vấn đề cơ bản, bao gồm:

  • Giới hạn độ dài trên các giá trị. Thuộc tính hệ thống có giới hạn chặt chẽ về độ dài của các giá trị của chúng (92 byte). Ngoài ra, vì các giới hạn này được hiển thị trực tiếp cho các ứng dụng Android dưới dạng macro C, nên việc tăng độ dài có thể gây ra các vấn đề tương thích ngược.
  • Không hỗ trợ loại. Tất cả các giá trị cơ bản là chuỗi, và API đơn giản là phân tích chuỗi thành một int hoặc bool . Khác kiểu dữ liệu phức hợp (ví dụ, mảng và struct) nên được mã hóa / giải mã bởi các khách hàng (ví dụ, "aaa,bbb,ccc" có thể được mã hóa như là một mảng của ba dây).
  • Ghi đè. Vì các thuộc tính hệ thống chỉ đọc được triển khai dưới dạng thuộc tính ghi một lần, các nhà cung cấp / ODM muốn ghi đè các giá trị chỉ đọc do AOSP xác định phải nhập các giá trị chỉ đọc của chính họ trước các giá trị chỉ đọc do AOSP xác định. Điều này, đến lượt nó, dẫn đến các giá trị ghi lại do nhà cung cấp xác định sẽ bị ghi đè bởi các giá trị do AOSP xác định.
  • Giải quyết các yêu cầu về không gian. Thuộc tính hệ thống chiếm một lượng lớn không gian địa chỉ trong mỗi tiến trình. Thuộc tính hệ thống được nhóm lại trong prop_area đơn vị với một kích thước cố định 128 KB, tất cả đều được phân bổ cho một không gian địa chỉ tiến trình ngay cả khi chỉ có một hệ thống tài sản duy nhất trong nó đang được truy cập. Điều này có thể gây ra sự cố trên các thiết bị 32-bit nơi không gian địa chỉ rất quý giá.

Chúng tôi đã cố gắng khắc phục những hạn chế này mà không làm mất khả năng tương thích, nhưng tiếp tục lo ngại rằng các thuộc tính hệ thống không được thiết kế để hỗ trợ truy cập các mục cấu hình chỉ đọc. Cuối cùng, chúng tôi quyết định rằng các thuộc tính hệ thống phù hợp hơn để chia sẻ một vài mục được cập nhật động trên tất cả Android trong thời gian thực và nhu cầu tồn tại đối với một hệ thống mới dành riêng cho việc truy cập các mục cấu hình chỉ đọc.

Thiết kế ConfigStore HAL

Thiết kế cơ bản là đơn giản:

Thiết kế Configstore HAL

Thiết kế Hình 1. ConfigStore HAL

  • Mô tả cờ xây dựng (hiện được sử dụng để biên dịch khung có điều kiện) trong HIDL.
  • Các nhà cung cấp và OEM cung cấp các giá trị dành riêng cho thiết bị và SoC cho các cờ xây dựng bằng cách triển khai dịch vụ HAL.
  • Sửa đổi khung để sử dụng dịch vụ HAL để tìm giá trị của một mục cấu hình trong thời gian chạy.

Mục cấu hình hiện tham chiếu bởi khuôn khổ được bao gồm trong một gói HIDL phiên bản ( android.hardware.configstore@1.0 ). Nhà cung cấp / OEM cung cấp giá trị cho các mục cấu hình bằng cách triển khai các giao diện trong gói này và khung sử dụng các giao diện khi cần lấy giá trị cho một mục cấu hình.

Cân nhắc về Bảo mật

Các cờ xây dựng được xác định trong cùng một giao diện bị ảnh hưởng bởi cùng một chính sách SELinux. Nếu một hoặc nhiều build cờ nên có những chính sách SELinux khác nhau, họ phải được tách ra để giao diện khác. Điều này có thể yêu cầu xem xét lại chủ yếu của android.hardware.configstore package như các giao diện riêng biệt không còn tương thích ngược.