Các tài nguyên sau đây cung cấp thông tin chi tiết về vị trí mã, công cụ, quy trình kiểm thử 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 được 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. Sử dụng các công cụ sau để tạo tệp kê khai nguyên mẫu/ma trận tương thích để bắt đầu .
LSHAL (Lớp trừu tượng phần cứng)
LSHAL là một công cụ phía thiết bị liệt kê tất cả HAL đã đăng ký
hwservicemanager
và tất cả cách triển khai truyền qua hiện có
(ví dụ: android.hardware.foo@1.0-impl.so
) trên thiết bị. Chiến dịch này cũng có thể
tạo tệp tệp kê khai thiết bị dựa trên danh sách:
adb shell su 0 /system/bin/lshal --init-vintf
Xin lưu ý những điều sau:
- Nếu một gói vừa được đăng ký với
hwservicemanager
, vừa tìm thấy một gói làm HAL truyền qua,<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 đề xuất rằng
được chèn thông qua
assemble_vintf
như giải thích bên dưới. - Tệp kê khai HAL đã tạo có thể không chính xác. Sự chú ý của con người là
để khắc phục sự không thống nhất giữa tệp kê khai thiết bị và những
vendor.img
thực sự cung cấp.
ASSEMBLE_VINTF
assemble_vintf
là một công cụ phía máy chủ giúp:
- Xác minh ma trận tương thích hoặc tệp kê khai là hợp lệ.
- Chèn các biến vào tệp kê khai/ma trận tương thích có sẵn trong bản dựng tạo tệp mới để cài đặt vào thiết bị.
- Kiểm tra khả năng tương thích giữa tệp đã tạo và tệp kép của tệp đó.
- Nếu có cung cấp một tệp kê khai, bạn có thể tuỳ ý tạo một bản mẫu ma trận tương thích với tệp kê khai.
Ví dụ: Tạo khả năng tương thích với thiết bị ma trận 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ả các HAL đều được đặt thành optional="true"
.
Ví dụ: Tạo khả năng tương thích khung sườn ma trận 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ả các HAL đều được đặt thành optional="true"
.
Ví dụ: Tạo tệp XML của tệp 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 sẽ được thực thi (trong hệ thống xây dựng, được sửa đổi để bỏ qua bước triển khai chi tiết) để tạo tệp XML của tệp 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 tệp kê khai nhà cung cấp và tệp kê khai ODM dưới dạng tệp kê khai thiết bị. Xem phần Thiết bị tệp kê khai để biết thông tin chi tiết.
Ví dụ: Tạo tệp XML ma trận tương thích với 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 sẽ được thực thi (trong hệ thống xây dựng, được sửa đổi để bỏ qua bước triển khai chi tiết) để tạo 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
Trong thời gian 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 thiết bị. Xem phần Thiết bị ma trận tương thích để biết thông tin chi tiết.
Ví dụ: Tạo tệp XML của tệp 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 bước triển khai chi tiết) để tạo tệp XML của tệp 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 và tệp kê khai hệ thống các mảnh, tệp kê khai sản phẩm và mảnh tệp kê khai sản phẩm dưới dạng tệp kê khai khung. Xem Khung tệp kê khai để biết thông tin 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 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 cùng các mô-đun Soong. FCM sản phẩm cũng có thể được cài đặt
với các mô-đun Soong; không xác định DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE
nếu điều 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ài đặt bằng mô-đun Soong.
Xác định như sau:
-
Xác định một mô-đun trong
device/manufacturer/device_name/Android.bp
. Ví dụ: (thay thế system_ext với sản phẩm cho FCM sản phẩm):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 bước triển khai chi tiết) để tạo 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 gồm khả năng tương thích với hệ thống ma trận và ma trận tương thích sản phẩm làm khả năng tương thích khung ma trận. Xem Khung ma trận tương thích để biết thông tin chi tiết.
Ví dụ: Tạo tệp kê khai nhà cung cấp qua các mảnh
Nhiều mảnh tệp 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
sẽ thêm IR HAL (Lớp trừu tượng phần cứng) vào tệp kê khai nhà cung cấp nếu
BOARD_ENABLE_IR
được định nghĩa và bỏ qua nếu
BOARD_ENABLE_IR
không được xác định. Các lệnh sau
(được sửa đổi để bỏ qua thông tin triển khai) được thực thi để tạo tệp 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, hãy xem:
assemble_vintf --help
Thử nghiệm
Dự án platform/system/libvintf
sử dụng
GTest cho
quá trình chuyển đổi tuần tự, huỷ chuyển đổi tuần tự và kiểm tra khả năng tương thích.
Cấp phép
tinyxml2
(bên ngoài/tinyxml2) để chuyển đổi tuần tự/giải tuần tự đối tượng đến/từ XML. Giấy phép giống BSD.libselinux
(bên ngoài/selinux/libselinux) để nhậ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 (có giấy phép phù hợp Các tệp MODULE_LICENSE_APACHE2 và INFORMATION).