HAL 可測試性檢查

Android 9 供應商測試套件 (VTS) 支援一種運行時方法,用於使用裝置配置來確定該裝置目標應跳過哪些 VTS 測試。

VTS 測試彈性

從 Android 8.0 開始,所有搭載 Android 8.0 及更高版本的裝置都需要進行 VTS 測試。但是,並非所有 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 。聲明供應商提供的 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 的所有版本。
  • 伊沙爾。裝置上的工具,顯示有關透過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 實例。決策流程:

Testability check for compliance

圖 1. VTS 合規性測試的可測試性檢查

不合格測試

對於不合規性測試,VTS 依賴供應商清單和lshal輸出來確定(和測試) manifest.xml檔案中未聲明的實驗性 HAL。決策流程:

Testability check for noncompliance

圖 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中聲明。)