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。這是裝置上的工具,可顯示使用 hwservicemanager 註冊的 HAL 服務的執行階段資訊。範例如下:
    android.hardware.vibrator@1.0::IVibrator/default

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

法規遵循測試

針對法規遵循測試,VTS 會根據供應商資訊清單判定及測試裝置提供的所有 HAL 執行個體。決策流程:

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

圖 1. 測試可行性檢查 (適用於 VTS 相容性測試)

不符規定的測試

針對不符規定的測試,VTS 會依據供應商資訊清單和 lshal 輸出內容,判斷 (並測試) manifest.xml 檔案中未聲稱的實驗 HAL。決策流程:

檢查不符規定的可測試性

圖 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 中宣告)。