Google 致力于为黑人社区推动种族平等。查看具体举措
Trang này được dịch bởi Cloud Translation API.
Switch to English

ConfigStore HAL

Android 8.0 chia hệ điều hành Android nguyên khối thành các phân vùng chung ( system.img ) và phần cứng cụ thể ( vendor.imgodm.img ). 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à 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 trong phần này trình bày chi tiết về giao diện HAL , triển khai dịch vụcách sử dụng phía máy khách , tất cả đều sử dụng surfaceflinger làm ví dụ. Để được trợ giúp với các lớp giao diện ConfigStore, hãy xem Thêm lớp và mục giao diện .

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ị về cơ bản là các chuỗi và các API chỉ cần phân tích chuỗi thành một int hoặc bool . Các kiểu dữ liệu kết hợp khác (ví dụ: mảng và cấu trúc) phải được mã hóa / giải mã bởi máy khách (ví dụ: "aaa,bbb,ccc" có thể được mã hóa dưới dạng mảng ba chuỗi).
  • Ghi đè. Vì 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. prop_area tính hệ thống được nhóm theo đơn vị prop_area với kích thước cố định là 128 KB, tất cả đều được phân bổ cho không gian địa chỉ tiến trình ngay cả khi chỉ có một thuộc tính hệ thống duy nhất trong đó đ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 số 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

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

  • Mô tả các 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 để tạo cờ 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ục cấu hình trong thời gian chạy.

Các mục cấu hình hiện được tham chiếu bởi khung được bao gồm trong gói HIDL đã được phiên bản hóa ( 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 nó 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 cờ xây dựng phải có các chính sách SELinux khác nhau, thì chúng phải được tách riêng sang một giao diện khác . Điều này có thể yêu cầu sửa đổi lớn android.hardware.configstore package vì các giao diện tách biệt không còn tương thích ngược.