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的所有版本。
  • lshal。在設備上一種工具,顯示了運行時間約與註冊的HAL服務信息hwservicemanager 。例如:
    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輸出,以確定(和測試)在不要求保護實驗的HAL manifest.xml文件。決策流程:

Testability check for non-compliance

圖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

要確定哪些的HAL由VTS測試訪問,確保每個HAL測試使用VtsHalHidlTargetTestEnvBase模板登記在測試訪問的HAL(多個)。然後,VTS 測試框架可以在預處理測試時提取註冊的 HAL。

對於符合性測試,你也可以檢查/system/etc/vintf/manifest.xml 。如果此處定義了 HAL,則 VTS 應對其進行測試。 (由系統(例如,所提供的服務HAL graphics.composer/vr ),置業資助貸款計劃在宣布/system/manifest.xml 。)