使用偵錯 ramdisk 的 VTS 測試

從 Android 10 開始, 用來執行的通用系統映像檔 (GSI) GSI/VTS 的 CTS 法規遵循測試已變更 以便進行簽署。這是 因為 VTS 需要 要執行 adb root,但 使用者組建裝置不支援 adb root

我們導入了偵錯 ramdisk (或偵錯開機映像檔),以啟用 adb root 上的 系統啟動載入程式, 解鎖。因此能簡化測試程序 資料流,方法是針對 CTS-on-GSI 使用相同的使用者建構 GSI system.img 採用 GSI 的 VTS。設定 STS 時,使用其他使用者偵錯原始設備製造商 (OEM) system.img 仍 這通常代表交易 不會十分要求關聯語意

下表顯示為了合規性測試而實施的映像檔和建構類型變更。 Android 10。

測試套件 測試 建構 偵錯 ramdisk ADB 根? Android 9 ->10 項建構變數變更
康乃狄克州 原始設備製造商 (OEM) 的系統 使用者 沒有變化
GSI 的 CTS GSI 使用者

使用者偵錯 ->使用者 GSI

已簽署的版本

STS 原始設備製造商 (OEM) 的系統 使用者偵錯 第 季新功能
VTS GSI 使用者

使用者偵錯 ->使用者 GSI

已簽署的版本

總覽

這些額外映像檔檔案會在 build 資料夾中產生 (${ANDROID_PRODUCT_OUT}):

  • boot-debug.img
  • vendor_boot-debug.img

boot-debug.img 刷新到裝置的 boot 分區時, 系統 sepolicy 檔案以及其他屬性檔案的使用者偵錯版本 已載入 adb_debug.prop。這樣一來,adb root 就能包含使用者建構作業 system.img (GSI 或原始設備製造商 (OEM))。

適用對象 通用核心映像檔 (GKI) 使用含有 vendor_boot 分區的裝置,則不得 boot-debug.img 閃爍,因為 boot 分區必須使用通過認證的 GKI 映像檔刷新。 請改為將 vendor_boot-debug.img 刷新到 vendor_boot 以便處理 ramdisk 偵錯作業。

使用偵錯 ramdisk 的必要條件

偵錯 ramdisk 是由執行法規遵循測試的原始設備製造商 (OEM) 提供。這項服務 且不得發布簽署,且只能在裝置解鎖時使用。

如果裝置符合以下條件,系統就不會產生偵錯 ramdisk,或使用以下方法:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE
  • 核心指令列中的 skip_initramfs
,瞭解如何調查及移除這項存取權。

Android 12 GSI

在 Android 12 GSI 中使用偵錯 ramdisk 時不需要額外指示。

自 2021 年 9 月 29 日起,偵錯 ramdisks 不再需要使用 repack_bootimg 工具。Android 12 GSI SGR1.210929.001 (7777720) 之後的建構整合了 由 system.img 中的 userdebug_plat_sepolicy.cil 檔案並忽略 userdebug_plat_sepolicy.cil 來自偵錯 ramdisk。詳情請參閱 CLs: 詳細資料。

Android 11 GSI

使用 boot-debug.imgvendor_boot-debug.img 時,系統會 已從偵錯的 userdebug_plat_sepolicy.cil 檔案載入 Sepolicy boot-debug.imgvendor_boot-debug.img 的 ramdisk。為了啟動 GSI 圖像,請務必遵守 android11-gsi敬上 即可重新建構 boot-debug.imgvendor_boot-debug.img

或者,repack_bootimg 工具可用來重新建構 boot-debug.imgvendor_boot-debug.img 搭配更新後的 GSI 通用政策。

重新封裝偵錯 ramdisk

合作夥伴不是為了重建 boot-debug.img 而導入季節性變更 可以使用 repack_bootimg 將 GSI 的加密檔案更新為 boot-debug.img (如果裝置使用 GKI,則為 vendor_boot-debug.img)。

相關步驟如下:

  1. 從以下位置下載 otatools.ziphttps://ci.android.com。 建議您從 aosp_arm64-userdebug 的建構構件下載 日期:aosp-main

  2. 設定 repack_bootimg 的執行環境:

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. 下載 userdebug_plat_sepolicy.cil 或 能讓您的 GSI 版本產生 boot-with-debug-ramdisk-${KERNEL_VERSION}.img 使用方式。例如,假設您在某個 VM 中 RJR1.211020.001 (7840830),然後從以下應用程式下載: https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latest

  4. 使用以下裝置更新裝置 boot-debug.imgvendor_boot-debug.imguserdebug_plat_sepolicy.cil:

    repack_bootimg --local --dst_bootimg boot-debug.img \
        --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    # If using GKI
    repack_bootimg --local --dst_bootimg vendor_boot-debug.img \
        --ramdisk_add userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    

    透過 boot-with-debug-ramdisk-${KERNEL_VERSION}.img

    repack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \
        --dst_bootimg boot-debug.img \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    # If using GKI
    repack_bootimg --src_bootimg boot-with-debug-ramdisk-5.4.img \
        --dst_bootimg vendor_boot-debug.img \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil \
        --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil
    

    可根據裝置調整 --ramdisk_add 的引數 儲存空間設定詳情請參閱下一節 解釋。

使用者偵錯政策的路徑

以上repack_bootimg複製 userdebug_plat_sepolicy.cil 檔案, --src_bootimg 的 ramdisk 到 --dst_bootimg 的 ramdisk。不過路徑 偵錯 ramdisk 內的 Android 版本可能會有所不同。於 Android 10 和 11 的路徑 first_stage_ramdisk/userdebug_plat_sepolicy.cil 適用於符合下列條件的裝置: androidboot.force_normal_boot=1。否則, 路徑為 userdebug_plat_sepolicy.cil

執行下列指令,檢查是否有 androidboot.force_normal_boot 編寫程式碼:

adb root
adb shell cat /proc/cmdline | grep force_normal_boot

從 Android 12 開始,偵錯中的路徑 無論userdebug_plat_sepolicy.cil androidboot.force_normal_boot=1。下列 表格,顯示偵錯 ramdisk 在不同 Android 版本中的路徑。

對圖片進行偵錯 Android 10 Android 11 Android 12
GKI boot-with-debug-ramdisk-${KERNEL_VERSION}.img first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
裝置專屬的 boot-debug.img 取決於 force_normal_boot 取決於 force_normal_boot userdebug_plat_sepolicy.cil
裝置專屬的 provider_boot-debug.img 取決於 force_normal_boot userdebug_plat_sepolicy.cil

您可以指定 --ramdisk_add,以使用 列出 src_path:dst_path 配對組合。舉例來說,下列指令 將 first_stage_ramdisk/userdebug_plat_sepolicy.cil 檔案從 Android 11 boot-with-debug-ramdisk-5.4.img 傳送至 Android 11 vendor_boot-debug.img 中的 first_stage_ramdisk/userdebug_plat_sepolicy.cil

repack_bootimg \
    --src_bootimg boot-with-debug-ramdisk-5.4.img \
    --dst_bootimg vendor_boot-debug.img \
    --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:first_stage_ramdisk/userdebug_plat_sepolicy.cil

如果核心指令列中沒有 androidboot.force_normal_boot=1, 那麼指令應如下調整,將目的地路徑變更為 userdebug_plat_sepolicy.cil

repack_bootimg \
    --src_bootimg boot-with-debug-ramdisk-5.4.img \
    --dst_bootimg vendor_boot-debug.img \
    --ramdisk_add first_stage_ramdisk/userdebug_plat_sepolicy.cil:userdebug_plat_sepolicy.cil

如果傳遞至 --dst_bootimg 的映像檔已設定為 AVB 鏈結 因此,執行 repack_bootimg 後,必須新增 AVB 頁尾 指令

例如,在執行 repack_bootimg「之前」,請執行下列指令, 檢查 vendor_boot-debug.img 是否含有鏈結 AVB 頁尾。

avbtool info_image --image vendor_boot-debug.img

如果原本使用鏈結 AVB 頁尾,則須新增 AVB 頁尾 在執行 repack_bootimg 指令之後。使用任一測試金鑰簽署 vendor_boot-debug.img 正常運作,因為偵錯 ramdisk 只能在 裝置已解鎖,因此允許在 bootvendor_boot 個分區。

avbtool add_hash_footer --partition_name vendor_boot \
    --partition_size 100663296 \
    --algorithm SHA256_RSA4096 \
    --key otatools/external/avb/test/data/testkey_rsa4096.pem \
    --image vendor_boot-debug.img