HAL 可測試性檢查

Android 9 供應商測試套件 (VTS) 支援 執行階段方法,使用裝置設定識別哪些 VTS 測試 不要為它指定裝置目標。

VTS 測試彈性

從 Android 8.0 開始,凡是採用 Android 8.0 以上版本。然而,並非所有 VTS 測試都適用於所有裝置 目標。例如:

  • 如果特定裝置不支援測試 HAL (例如 IR),VTS 會 就不用針對該 HAL 測試裝置目標執行測試
  • 如果多部裝置共用相同的 SoC 和廠商映像檔, 不同的硬體功能,VTS 必須判斷測試與否 應該執行或略過。

VTS 測試類型

VTS 包含下列測試類型:

  • 法規遵循測試可確保架構之間的相容性 和廠商分區您必須在 搭載 Android 8.0 以上版本的裝置。
  • 違規測試可協助廠商改善產品 (效能/模糊等)這些測試是供應商可選的。

測試是否為合規性測試,取決於其所屬的計畫 。使用 VTS 方案視為法規遵循測試。

判斷支援的 HAL

VTS 可以使用下列檔案判斷裝置目標是否支援 特定 HAL:

  • /system/compatibility_matrix.xml。宣告 HAL 執行個體 系統所需的架構範例:
    <hal format="hidl" optional="true">
        <name>android.hardware.vibrator</name>
        <version>1.0-1</version>
        <interface>
           <name>IVibrator</name>
           <instance>default</instance>
        </interface>
    </hal>
    
    • optional 屬性會指出 HAL 是否嚴格 系統所需的架構
    • 檔案可能包含同一個 HAL (名稱相同) 的多個項目 但版本和介面不同
    • 檔案中可以包含以下項目的多種 version 設定: 表示此架構可與不同版本搭配使用。
    • version1.0-1 表示架構能與 1.0 版,且不需要高於 1.1 的版本。
  • 裝置 manifest.xml。宣稱由 Pod 提供的 HAL 例項 供應商。範例:
    <hal format="hidl">
        <name>android.hardware.vibrator</name>
        <transport>hwbinder</transport>
        <version>1.2</version>
        <interface>
            <name>IVibrator</name>
           <instance>default</instance>
        </interface>
    </hal>
    
    • 檔案可能包含同一個 HAL (名稱相同) 的多個項目 但版本和介面不同
    • 如果檔案僅包含單一 version 設定 一個項目,version1.2 表示廠商支援所有版本 從 1.0 到 1.2
  • lshal。裝置上的工具會顯示下列執行階段資訊: 透過 hwservicemanager 註冊的 HAL 服務。範例:
    android.hardware.vibrator@1.0::IVibrator/default
    

    lshal 也會顯示具有直通式的所有 HAL 實作 (也就是讓對應的 -impl.so 檔案 裝置)。範例:
    android.hardware.nfc@1.0::I*/* (/vendor/lib/hw/)
    android.hardware.nfc@1.0::I*/* (/vendor/lib64/hw/)
    

合規性測試

對於合規性測試,VTS 會根據供應商資訊清單來判定 測試) 從裝置提供的所有 HAL 執行個體。決策流程:

可測試性檢查是否符合規定

圖 1. 可測試 VTS 法規遵循測試
,瞭解如何調查及移除這項存取權。

違規測試

對於違規測試,VTS 將根據供應商資訊清單, 使用 lshal 輸出內容來判斷及測試實驗性 HAL 在 manifest.xml 檔案中聲明著作權。決策流程:

可測試性檢查是否違規

圖 2. 可測試性檢查是否符合 VTS 規定 測試
,瞭解如何調查及移除這項存取權。

找出供應商資訊清單

VTS 會在下列位置檢查供應商 manifest.xml 檔案 排列順序:

  1. /vendor/etc/vintf/manifest.xml + ODM 資訊清單 (如有相同的 HAL) 這兩個位置都已定義,ODM 資訊清單會覆寫 /vendor/etc/vintf/manifest.xml)
  2. /vendor/etc/vintf/manifest.xml
  3. ODM manifest.xml 檔案,該檔案是從以下位置載入: 以下順序:
    1. /odm/etc/vintf/manifest_$(ro.boot.product.hardware.sku).xml
    2. /odm/etc/vintf/manifest.xml
    3. /odm/etc/manifest_$(ro.boot.product.hardware.sku).xml
    4. /odm/etc/manifest.xml
    5. /vendor/manifest.xml

VTS 可測試性檢查工具

vts_testibility_checker 是封裝與 VTS 的二進位檔, 執行階段的 VTS 測試架構,以判斷特定 HAL 測試是否 可測試與否採用以下依據 libvintf 載入及剖析供應商資訊清單檔案,並實作決策流程 說明。

如何使用 vts_testability_check

  • 法規遵循測試:
    vts_testability_check -c -b <bitness>  <hal@version>
    
  • 違規測試:
    vts_testability_check -b <bitness>  <hal@version>
    

vts_testability_check 的輸出內容使用下列 JSON 檔案 格式:

{testable: <True/False> Instances: <list of instance names of HAL service>}

判斷存取的 HAL

如要判斷 VTS 測試存取了哪些 HAL,請確保每項 HAL 測試都正常運作 採用 VtsHalHidlTargetTestEnvBase ,註冊在測試中存取的 HAL。VTS 測試 隨後可在預先處理測試時擷取已註冊的 HAL。

如需法規遵循測試,您也可以 /system/etc/vintf/manifest.xml。如果在這裡定義了 HAL,VTS 並進行測試(針對系統提供的 HAL 服務 (例如 graphics.composer/vr),HAL 會在 /system/manifest.xml)。