Các tài nguyên sau đây cung cấp thông tin chi tiết về vị trí mã, công cụ, thử nghiệm và cấp phép.
Vị trí mã có thể truy vấn
Mã cho đối tượng giao diện nhà cung cấp có thể truy vấn sẽ chuyển đến system/libvintf
.
Công cụ
Tệp kê khai chữ viết tay và ma trận tương thích có thể khó khăn. Hãy sử dụng các công cụ sau để tạo ma trận tương thích/bản kê khai mẫu sẵn để bắt đầu.
LSHAL
LSHAL là một công cụ phía thiết bị liệt kê tất cả các HAL đã đăng ký cho hwservicemanager
và tất cả các triển khai chuyển tiếp có sẵn (ví dụ: android.hardware.foo@1.0-impl.so
) trên thiết bị. Nó cũng có thể tạo tệp kê khai thiết bị dựa trên danh sách:
adb shell su 0 /system/bin/lshal --init-vintf
Lưu ý những điều dưới đây:
- Nếu một gói vừa được đăng ký vào
hwservicemanager
và được tìm thấy dưới dạng HAL chuyển tiếp, thì<transport>
được đặt thànhhwbinder
. - Không có phiên bản SELinux nào được ghi vào tệp kê khai. Có ý kiến cho rằng phần tử được chèn thông qua
assemble_vintf
như được giải thích bên dưới. - Tệp kê khai HAL được tạo có thể không chính xác. Cần có sự chú ý của con người để khắc phục sự không nhất quán giữa bảng kê khai thiết bị và những gì
vendor.img
thực sự cung cấp.
ASSEMBLE_VINTF
assemble_vintf
là một công cụ phía máy chủ:
- Xác minh ma trận tương thích hoặc tệp kê khai là hợp lệ.
- Đưa các biến vào các bảng kê khai/ma trận tương thích có sẵn tại thời điểm xây dựng và tạo một tệp mới sẽ được cài đặt vào thiết bị.
- Kiểm tra tính tương thích giữa tệp được tạo và tệp kép của nó.
- Nếu tệp kê khai được cung cấp, tùy ý tạo ma trận tương thích bản soạn sẵn tương thích với tệp kê khai.
Ví dụ: Tạo ma trận tương thích thiết bị từ tệp kê khai khung
assemble_vintf -m --hals-only \ -i system/libhidl/manifest.xml \ -o device/manufacturer/device_name/compatibility_matrix.xml
Lưu ý rằng tất cả HAL được đặt thành optional="true"
.
Ví dụ: Tạo ma trận tương thích khung xương từ tệp kê khai thiết bị
assemble_vintf -m --hals-only \ -i device/foo/bar/manifest.xml \ -o path/to/place/output/compatibility_matrix.xml
Lưu ý rằng tất cả HAL được đặt thành optional="true"
.
Ví dụ: Tạo tệp XML kê khai thiết bị từ các biến
Tại thời điểm xây dựng, nếu các biến sau được xác định trong device/manufacturer/device_name/BoardConfig.mk
:
# Vendor manifest is named DEVICE_MANIFEST_FILE for legacy reasons. DEVICE_MANIFEST_FILE := \ device/manufacturer/device_name/vendor_manifest.xml ODM_MANIFEST_FILES := \ device/manufacturer/device_name/odm_manifest.xml ODM_MANIFEST_SKUS := sku1 sku2 ODM_MANIFEST_SKU1_FILES := \ device/manufacturer/device_name/odm_manifest_sku1.xml ODM_MANIFEST_SKU2_FILES := \ device/manufacturer/device_name/odm_manifest_sku2.xml
Sau đó, các lệnh sau được thực thi (trong hệ thống xây dựng, được sửa đổi để bỏ qua các chi tiết triển khai) để tạo các tệp XML của bản kê khai thiết bị:
# vendor manifest; only when DEVICE_MANIFEST_FILE is set BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) assemble_vintf \ $(addprefix,-i ,$(DEVICE_MANIFEST_FILE)) \ -o $(TARGET_OUT_VENDOR)/etc/vintf/manifest.xml # ODM manifests assemble_vintf \ $(addprefix,-i ,$(ODM_MANIFEST_FILES)) \ -o $(TARGET_OUT_ODM)/etc/vintf/manifest.xml # ODM manifests for each sku assemble_vintf \ $(addprefix,-i ,$(ODM_MANIFEST_SKU1_FILES)) \ -o $(TARGET_OUT_ODM)/etc/vintf/manifest_sku1.xml assemble_vintf \ $(addprefix,-i ,$(ODM_MANIFEST_SKU2_FILES)) \ -o $(TARGET_OUT_ODM)/etc/vintf/manifest_sku2.xml
Trong thời gian chạy, đối tượng VINTF kết hợp các bảng kê khai của nhà cung cấp và các bảng kê khai ODM làm bảng kê khai thiết bị. Xem Bản kê khai thiết bị để biết chi tiết.
Ví dụ: Tạo tệp XML ma trận tương thích thiết bị từ các biến
Tại thời điểm xây dựng, nếu các biến sau được xác định trong device/manufacturer/device_name/BoardConfig.mk
:
# vendor compatibility matrix is named DEVICE_MATRIX_FILE for legacy reasons. DEVICE_MATRIX_FILE := \ device/manufacturer/device_name/vendor_compatibility_matrix.xml \ device/manufacturer/device_name/vendor_compatibility_matrix_additional.xml
Sau đó, các lệnh sau được thực thi (trong hệ thống xây dựng, được sửa đổi để bỏ qua các chi tiết triển khai) để tạo các tệp XML ma trận tương thích thiết bị:
# vendor compatibility matrix; only when DEVICE_MATRIX_FILE is set assemble_vintf \ $(addprefix,-i ,$(DEVICE_MATRIX_FILE)) \ -o $(TARGET_OUT_VENDOR)/etc/vintf/compatibility_matrix.xml
Khi chạy, đối tượng VINTF sử dụng ma trận tương thích của nhà cung cấp làm ma trận tương thích của thiết bị. Xem Ma trận tương thích thiết bị để biết chi tiết.
Ví dụ: Tạo tệp XML kê khai khung từ các biến
Các biến sau có thể được xác định trong device/manufacturer/device_name/BoardConfig.mk
:
# Device-specific system manifest is named DEVICE_FRAMEWORK_MANIFEST_FILE for legacy reasons DEVICE_FRAMEWORK_MANIFEST_FILE := \ device/manufacturer/device_name/device_system_manifest.xml # Product manifest PRODUCT_MANIFEST_FILES := \ device/manufacturer/device_name/product_manifest.xml
Các lệnh sau được thực thi (trong hệ thống xây dựng, được sửa đổi để bỏ qua các chi tiết triển khai) để tạo các tệp XML kê khai khung:
# system manifest assemble_vintf \ -i system/libhidl/vintfdata/manifest.xml \ $(addprefix,-i ,$(DEVICE_FRAMEWORK_MANIFEST_FILE)) \ -o $(TARGET_OUT)/etc/vintf/manifest.xml # product manifest assemble_vintf \ $(addprefix,-i ,$(PRODUCT_MANIFEST_FILES)) \ -o $(TARGET_OUT_PRODUCT)/etc/vintf/manifest.xml
Trong thời gian chạy, đối tượng VINTF kết hợp tệp kê khai hệ thống, các đoạn tệp kê khai hệ thống, tệp kê khai sản phẩm và tệp kê khai sản phẩm dưới dạng tệp kê khai khung. Xem bảng kê khai khung để biết chi tiết.
Ví dụ: Tạo tệp XML ma trận tương thích khung từ các biến
Các biến sau có thể được xác định trong device/manufacturer/device_name/BoardConfig.mk
để xác định FCM của sản phẩm và FCM của hệ thống dành riêng cho thiết bị:
DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE := \ device/manufacturer/device_name/product_compatibility_matrix.xml # Device-specific system compatibility matrix is named # DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE for legacy reasons. DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE := \ device/manufacturer/device_name/device_system_compatibility_matrix.xml
FCM system_ext phải được cài đặt với các mô-đun Soong. Sản phẩm FCM cũng có thể được cài đặt với các module Soong; không xác định DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE
nếu phương pháp này được sử dụng. Ngoài ra, nhiều phiên bản FCM sản phẩm và phiên bản FCM system_ext có thể được cài đặt với mô-đun Soong. Xác định những điều sau đây:
- Xác định mô-đun trong
device/manufacturer/device_name/Android.bp
. Ví dụ (thay thế system_ext bằng sản phẩm cho sản phẩm FCM):vintf_compatibility_matrix { name: "system_ext_compatibility_matrix.xml", stem: "compatibility_matrix.xml", system_ext_specific: true, // product_specific: true, // for product FCM srcs: [ "system_ext_compatibility_matrix.xml", ], }
- Cài đặt mô-đun vào
device/manufacturer/device_name/device.mk
. Ví dụ:PRODUCT_PACKAGES += system_ext_compatibility_matrix.xml
Các lệnh sau được thực thi (trong hệ thống xây dựng, được sửa đổi để bỏ qua các chi tiết triển khai) để tạo các tệp XML ma trận tương thích khung:
# common system compatibility matrix for each FCM version BOARD_SEPOLICY_VERS=$(BOARD_SEPOLICY_VERS) \ POLICYVERS=$(POLICYVERS) \ BOARD_AVB_VBMETA_VERSION=$(BOARD_AVB_VBMETA_VERSION) assemble_vintf \ -i hardware/interfaces/compatibility_matrices/compatibility_matrix.empty.xml $(addprefix,-i ,$(DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE)) \ -o $(TARGET_OUT)/etc/vintf/compatibility_matrix.device.xml # framework compatibility matrixes at each FCM version assemble_vintf -i hardware/interfaces/compatibility_matrices/compatibility_matrix.{level}.xml \ -o $(TARGET_OUT)/etc/vintf/compatibility_matrix.{level}.xml \ --kernel=... # product framework compatibility matrix; only when # DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE is set or when the Soong module for # product FCM is defined assemble_vintf -i $(DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE) -o $(TARGET_OUT_PRODUCT)/etc/vintf/compatibility_matrix.xml # system_ext framework compatibility matrix; only when the Soong module for # system_ext FCM is defined assemble_vintf -i <srcs for the soong module> -o $(TARGET_OUT_SYSTEM_EXT)/etc/vintf/compatibility_matrix.xml
Trong thời gian chạy, đối tượng VINTF kết hợp một tập hợp con các ma trận tương thích hệ thống và ma trận tương thích sản phẩm làm ma trận tương thích khung. Xem Ma trận tương thích khung để biết chi tiết.
Ví dụ: Tạo bảng kê khai nhà cung cấp từ các mảnh
Nhiều mảnh bảng kê khai của nhà cung cấp có thể được nhóm lại tại thời điểm xây dựng. Ví dụ:
<!-- device/manufacturer/device_name/manifest_common.xml --> <manifest version="1.0" type="device"> <!-- common HALs here --> </manifest>
<!-- device/manufacturer/device_name/ir.xml --> <manifest version="1.0" type="device"> <hal> <name>android.hardware.ir</name> <version>1.0</version> <!-- other fields --> </hal> </manifest>
# device/manufacturer/device_name/BoardConfig.mk DEVICE_MANIFEST_FILE := device/manufacturer/device_name/manifest_common.xml ifdef BOARD_ENABLE_IR DEVICE_MANIFEST_FILE += device/manufacturer/device_name/ir.xml endif
Sau đó, assemble_vintf
thêm IR HAL vào bảng kê khai của nhà cung cấp nếu BOARD_ENABLE_IR
được xác định và bỏ qua nó nếu BOARD_ENABLE_IR
không được xác định. Các lệnh sau (được sửa đổi để bỏ qua chi tiết triển khai) được thực thi để tạo bản kê khai nhà cung cấp:
# if BOARD_ENABLE_IR is defined BOARD_SEPOLICY_VERS=10000.0 assemble_vintf \ -i device/manufacturer/device_name/manifest_common.xml:device/manufacturer/device_name/ir.xml \ -o $(TARGET_OUT_VENDOR)/manifest.xml # if BOARD_ENABLE_IR is not defined BOARD_SEPOLICY_VERS=10000.0 assemble_vintf \ -i device/manufacturer/device_name/manifest_common.xml \ -o $(TARGET_OUT_VENDOR)/manifest.xml
Để biết chi tiết, xem:
assemble_vintf --help
Kiểm tra
Dự án platform/system/libvintf
sử dụng GTest để tuần tự hóa, giải tuần tự hóa và kiểm tra tính tương thích.
Cấp phép
-
tinyxml2
(bên ngoài/tinyxml2) để tuần tự hóa/giải tuần tự hóa đối tượng đến/từ XML. Giấy phép giống BSD. -
libselinux
(external/selinux/libselinux) để nhận phiên bản Policydb. Giấy phép phạm vi công cộng. -
libz
(bên ngoài/zlib) để giải nén/proc/config.gz
. Giấy phép giống BSD. - Dự án
libvintf
sử dụng giấy phép Apache 2.0 (với các tệp MODULE_LICENSE_APACHE2 và NOTICE thích hợp).