Ma trận tương thích

Phần này mô tả các ma trận tương thích khung và thiết bị cũng như lược đồ ma trận tương thích . Để biết quy tắc so khớp, hãy xem Quy tắc so khớp .

Ma trận tương thích khung (FCM)

Ma trận tương thích khung (FCM) mô tả các yêu cầu của khung trên thiết bị chạy trên đó. Ma trận tương thích khung bao gồm ma trận tương thích hệ thống, ma trận tương thích sản phẩmma trận tương thích system_ext . Bản kê khai thiết bị phải đáp ứng các yêu cầu của FCM (các yêu cầu được thực thi tại thời điểm xây dựng, thời gian chạy và trong VTS).

FCM system_ext và FCM sản phẩm là phần bổ sung của FCM dành riêng cho thiết bị (được cài đặt trong phân vùng hệ thống).

  • FCM của thiết bị phải phản ánh yêu cầu của các mô-đun trong phân vùng hệ thống .
  • FCM system_ext sẽ phản ánh các yêu cầu của các mô-đun trong phân vùng system_ext.
  • FCM của sản phẩm phải phản ánh các yêu cầu theo mô-đun trong phân vùng sản phẩm .

Tất cả các FCM phải phù hợp với các sửa đổi của OEM đối với khung trong các phân vùng hệ thống, sản phẩm và system_ext. Ví dụ: nếu một ứng dụng được cài đặt trong phân vùng sản phẩm sử dụng tiện ích mở rộng của nhà cung cấp giao diện HAL thì yêu cầu giao diện HAL phải được khai báo trong FCM của sản phẩm.

Ví dụ về tệp ma trận tương thích hệ thống:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework" level="3">
    <hal>
        <name>android.hardware.camera</name>
        <version>1.0</version>
        <version>3.1-4</version>
        <interface>
            <name>ICameraProvider</name>
            <instance>default</instance>
            <regex-instance>[a-z_]+/[0-9]+</regex-instance>
        </interface>
    </hal>
    <hal>
        <name>android.hardware.nfc</name>
        <version>1.0</version>
        <interface>
            <name>INfc</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal optional="true">
        <name>android.hardware.graphics.composer</name>
        <version>2.1</version>
        <interface>
            <name>IComposer</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="aidl" optional="true">
        <name>android.hardware.light</name>
        <version>1-2</version>
        <interface>
            <name>ILights</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal format="native">
        <name>GL</name>
        <version>1.1</version>
        <version>3.0</version>
    </hal>
    <hal format="native">
        <name>EGL</name>
        <version>1.1</version>
    </hal>
    <kernel version="3.18.51">
        <!-- common configs -->
    </kernel>
    <kernel version="3.18.51">
        <!-- arm specific configs -->
        <condition>
            <config>
                <key>CONFIG_ARM</key>
                <value type="tristate">y</value>
            </config>
        <condition>
        <config>
            <key>CONFIG_A</key>
            <value type="string"></value>
        </config>
        <config>
            <key>CONFIG_B</key>
            <value type="tristate">y</value>
        </config>
    </kernel>
    <kernel version="4.1.22">
        <!-- common configs -->
        <config>
            <key>CONFIG_A</key>
            <value type="string">foo</value>
        </config>
        <config>
            <key>CONFIG_B2</key>
            <value type="int">1024</value>
        </config>
    </kernel>
    <sepolicy>
        <kernel-sepolicy-version>30</kernel-sepolicy-version>
        <sepolicy-version>25.0</sepolicy-version>
        <sepolicy-version>26.0-3</sepolicy-version>
    </sepolicy>
    <avb>
        <vbmeta-version>2.1</vbmeta-version>
    </avb>
    <xmlfile format="dtd">
        <name>media_profile</name>
        <version>1.0</version>
        <path>/system/etc/media_profile_V1_0.dtd</path>
    </xmlfile>
</compatibility-matrix>

Để biết thêm chi tiết, hãy xem Vòng đời FCM .

Ma trận tương thích sản phẩm

FCM của sản phẩm là tệp ma trận tương thích khung trong phân vùng sản phẩm. Đối tượng VINTF kết hợp FCM của sản phẩm với các FCM trong phân vùng hệ thống và system_ext khi chạy.

Ví dụ về tệp FCM của sản phẩm:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="framework">
    <hal>
        <name>vendor.foo.camera</name>
        <version>1.0</version>
        <interface>
            <name>IBetterCamera</name>
            <instance>default</instance>
        </interface>
    </hal>
</compatibility-matrix>

Ma trận tương thích System_ext

system_ext FCM là tệp ma trận tương thích khung trong phân vùng system_ext. Đối tượng VINTF tham gia system_ext FCM với FCM trong các phân vùng hệ thống và sản phẩm khi chạy. Xem ma trận tương thích sản phẩm để biết ví dụ về tệp FCM system_ext.

Ma trận tương thích thiết bị (DCM)

Ma trận tương thích của thiết bị mô tả một tập hợp các yêu cầu mà thiết bị mong đợi từ khung (các yêu cầu được thực thi khi khởi chạy và thời gian OTA).

Tệp DCM mẫu:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Comments, Legal notices, etc. here -->
<compatibility-matrix version="1.0" type="device">
    <hal>
        <name>android.hidl.manager</name>
        <version>1.0</version>
        <interface>
            <name>IServiceManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.memory</name>
        <version>1.0</version>
        <interface>
            <name>IMemory</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.hidl.allocator</name>
        <version>1.0</version>
        <interface>
            <name>IAllocator</name>
            <instance>ashmem</instance>
        </interface>
    </hal>
    <hal>
        <name>android.framework.sensor</name>
        <version>1.0</version>
        <interface>
            <name>ISensorManager</name>
            <instance>default</instance>
        </interface>
    </hal>
    <vendor-ndk>
        <version>27</version>
    </vendor-ndk>
    <system-sdk>
        <version>27</version>
    </system-sdk>
</compatibility-matrix>

Lược đồ ma trận tương thích

Phần này mô tả ý nghĩa của các thẻ XML này. Một số thẻ "bắt buộc" có thể bị thiếu trong tệp nguồn trong cây nguồn Android và được viết bởi assemble_vintf tại thời điểm xây dựng. Thẻ "Bắt buộc" phải có trong các tệp tương ứng trên thiết bị.

?xml
Không bắt buộc. Nó chỉ cung cấp thông tin cho trình phân tích cú pháp XML.
compatibility-matrix.version
Yêu cầu. Phiên bản meta của ma trận tương thích này. Mô tả các yếu tố được mong đợi trong ma trận tương thích. Không liên quan đến phiên bản XML.
compatibility-matrix.type
Yêu cầu. Loại ma trận tương thích này:
  • "device" : Ma trận tương thích của thiết bị.
  • "framework" : Ma trận tương thích khung.
manifest.level
Cần thiết cho ma trận tương thích khung. Trong Android 12 trở lên, được cho phép trong các tệp ma trận tương thích khung trong phân vùng sản phẩm và system_ext. Chỉ định Phiên bản ma trận tương thích khung (Phiên bản FCM) của tệp này. Không khai báo điều này trong ma trận tương thích khung dành riêng cho thiết bị (ví dụ DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE ).
compatibility-matrix.hal
Tùy chọn và có thể lặp lại. Liệt kê một HAL (HIDL hoặc gốc) được chủ sở hữu của ma trận tương thích (khung hoặc thiết bị) yêu cầu phải có. Các mục HAL được phân biệt bằng phần tử <name> ; có thể có một số mục HAL có cùng tên (ngụ ý điều kiện "và").
compatibility-matrix.hal.format
Không bắt buộc. Giá trị có thể là một trong:
  • "hidl" : HIDL HAL. Đây là mặc định.
  • "aidl" : AIDL HAL . Chỉ hợp lệ trên phiên bản meta ma trận tương thích 2.0.
  • "native" : HAL bản địa.
compatibility-matrix.hal.optional
Thuộc tính là tùy chọn và mặc định là sai. Cho biết HAL này có phải là tùy chọn đối với chủ sở hữu ma trận tương thích (khung hoặc thiết bị) hay không. Nếu mục nhập <hal> được đánh dấu là tùy chọn, điều đó có nghĩa là chủ sở hữu có thể làm việc với HAL này, nếu có, nhưng không yêu cầu nó phải có mặt.
compatibility-matrix.hal.name
Yêu cầu. Tên gói đầy đủ của HAL này. Ví dụ:
  • android.hardware.camera (HIDL hoặc AIDL HAL)
  • GLES (HAL gốc, chỉ yêu cầu tên)
compatibility-matrix.hal.version
Danh sách các phạm vi phiên bản (xem kết quả khớp HAL ) xác định phiên bản nào mà chủ sở hữu ma trận tương thích (khung hoặc thiết bị) mong đợi.

Đối với HIDL và HAL gốc, bắt buộc phải có, có thể lặp lại mà không trùng lặp. Định dạng là một trong những điều sau đây:
  • MAJOR . MINOR_MIN - MINOR_MAX
  • MAJOR . MINOR (tương đương với MAJOR . MINOR - MINOR )

Đối với AIDL HAL, không được hiện diện trên các thiết bị chạy Android 11 trở xuống. Tùy chọn trên các thiết bị chạy phiên bản mới hơn. Nếu được chỉ định, định dạng là một trong những định dạng sau:
  • VERSION_MIN - VERSION_MAX
  • VERSION (tương đương với VERSION - VERSION )
Nếu không được chỉ định, giá trị mặc định là 1 .
compatibility-matrix.hal.interface
Tùy chọn, có thể lặp lại. Danh sách các giao diện bắt buộc của HAL này.
compatibility-matrix.hal.interface.name
Yêu cầu. Tên của giao diện.
compatibility-matrix.hal.interface.instance
Tùy chọn, có thể lặp lại. Danh sách các phiên bản cần thiết của giao diện này.
compatibility-matrix.hal.interface.regex-instance
Tùy chọn, có thể lặp lại. Danh sách các mẫu tên phiên bản bắt buộc trên giao diện này. Sử dụng định dạng Biểu thức chính quy mở rộng .
compatibility-matrix.kernel
Tùy chọn, có thể lặp lại. Chỉ định danh sách cấu hình kernel mà khung yêu cầu trên mỗi phiên bản kernel.
Nhiều <kernel> có cùng <version> có thể tồn tại để ám chỉ mối quan hệ "và". Mỗi <kernel> là một "đoạn" yêu cầu chỉ được kích hoạt khi <conditions> được đáp ứng.
compatibility-matrix.kernel.version
Yêu cầu. Phiên bản hạt nhân. Định dạng là VERSION . MAJOR_REVISION . MINOR_REVISION . Phiên bản và bản sửa đổi chính phải khớp chính xác. Bản sửa đổi nhỏ xác định phiên bản LTS tối thiểu của kernel mà khung mong đợi.
compatibility-matrix.kernel.condition
Không bắt buộc. Không được tồn tại trong <kernel> đầu tiên của mỗi phiên bản. Chỉ định một danh sách các điều kiện. Khi các điều kiện được đáp ứng, các yêu cầu nêu trong đoạn <kernel> này sẽ được kích hoạt.
compatibility-matrix.kernel.config
Tùy chọn, có thể lặp lại. Liệt kê các mục CONFIG phải phù hợp với phiên bản kernel này. Mỗi mục CONFIG là một cặp khóa-giá trị; các mục cấu hình được phân biệt bằng khóa.
compatibility-matrix.kernel.config.key
Yêu cầu. Tên khóa của mục CONFIG . Bắt đầu với CONFIG_ .
compatibility-matrix.kernel.config.value
Yêu cầu. Giá trị của mục CONFIG . Định dạng phụ thuộc vào loại:
  • string . Các trích dẫn được bỏ qua.
  • int . Giá trị thập phân và thập lục phân (phải bắt đầu bằng 0x hoặc 0X) được chấp nhận. Được hiểu là số nguyên 64 bit; tràn dẫn đến cắt ngắn. (Trình phân tích cú pháp chấp nhận các giá trị từ -2 64 + 1 đến 2 64 - 1, bit thứ 65 bị cắt bớt; để biết chi tiết, hãy tham khảo trang man strtoull .)
  • range . Định dạng là [int]-[int] , ví dụ 10-20 . Giá trị thập lục phân được chấp nhận và phải bắt đầu bằng 0x hoặc 0X . Hai ranh giới phải là số nguyên 64 bit không dấu.
  • tristate . Các giá trị hợp lệ là y , mn .
compatibility-matrix.kernel.config.value.type
Yêu cầu. Loại giá trị của mục CONFIG , một trong:
  • string
  • int
  • range
  • tristate
compatibility-matrix.sepolicy
Yêu cầu. Chứa tất cả các mục liên quan đến sepolicy. Chỉ được sử dụng bởi ma trận tương thích khung.
compatibility-matrix.sepolicy.sepolicy-version
Bắt buộc, có thể lặp lại. Mô tả yêu cầu về phiên bản sepolicy. Tương ứng manifest.sepolicy.version . Mỗi phiên bản của một phần tử xác định một loạt các phiên bản riêng biệt.
compatibility-matrix.sepolicy.kernel-sepolicy-version
Yêu cầu. Khai báo phiên bản policydb mà khung hoạt động.
compatibility-matrix.avb.vbmeta-version
Không bắt buộc; chỉ được sử dụng bởi ma trận tương thích khung. Khai báo phiên bản AVB dùng để ký system.img . Không được dùng nữa trong Android 10.
compatibility-matrix.vendor-ndk
Không bắt buộc; chỉ được sử dụng bởi ma trận tương thích thiết bị. Khai báo yêu cầu chụp nhanh nhà cung cấp VNĐK. Nếu thiếu, không có yêu cầu VNĐK nào được thực hiện trên ảnh hệ thống.
compatibility-matrix.vendor-ndk.version
Yêu cầu. Một số nguyên dương khai báo phiên bản VNĐK theo yêu cầu của hình ảnh nhà cung cấp.
compatibility-matrix.vendor-ndk.library
Tùy chọn, có thể lặp lại. Khai báo một bộ thư viện VNĐK theo yêu cầu của image nhà cung cấp. Ngữ nghĩa tương tự manifest.vendor-ndk.library .
compatibility-matrix.system-sdk.version
Tùy chọn, có thể lặp lại; chỉ được sử dụng bởi ma trận tương thích thiết bị. Khai báo yêu cầu của ứng dụng của nhà cung cấp trên các phiên bản SDK hệ thống. Nếu thiếu, không có yêu cầu SDK hệ thống nào được thực hiện trên hình ảnh hệ thống.