使用調試 Ramdisk 進行 VTS 測試

由於Android如圖10所示,通用系統映像(GSI)用於運行CTS-上-GSI / VTS從userdebug改變為用戶生成類型符合性測試,以便被釋放簽署。這是VTS測試問題,因為VTS要求adb root運行,但adb root不可用的用戶建立設備上。

調試虛擬盤(或調試引導映像)被引入,以使adb root的用戶建立設備,其引導加載程序上解鎖。這通過使用相同的用戶構建GSI簡化測試流程system.img為CTS-ON-GSI和VTS-ON-GSI。對於STS設置,使用其他userdebug OEM system.img仍然是必需的。

下表顯示了 Android 10 中合規性測試的映像和構建類型更改。

測試套件測試建造調試虛擬磁盤亞行根? Android 9 -> 10 構建變體更改
中旅OEM的系統用戶N N沒變
CTS-on-GSI全球信息系統用戶N N

用戶調試 -> 用戶 GSI

釋放簽署

STS OEM的系統用戶調試NQ 中的新內容
VTS全球信息系統用戶

用戶調試 -> 用戶 GSI

釋放簽署

概述

這些附加的圖像文件生成文件夾下生成( ${ANDROID_PRODUCT_OUT} ):

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

boot-debug.img閃蒸到boot裝置的分區,則系統sepolicy文件的版本userdebug和附加屬性文件, 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在內核命令行

安卓 12 GSI

無需額外說明即可將調試 ramdisk 與 Android 12 GSI 結合使用。

從2021年9月29日開始,調試的ramdisk不再需要用更新repack_bootimg工具。 Android的12 GSI構建之後SGR1.210929.001 (7777720)採用了先進的最新userdebug_plat_sepolicy.cil文件中的system.img和忽略userdebug_plat_sepolicy.cil從調試RAMDISK。見的CL了解詳情。

安卓 11 GSI

boot-debug.imgvendor_boot-debug.img時,系統sepolicy被從加載userdebug_plat_sepolicy.cil中的調試RAMDISK文件boot-debug.imgvendor_boot-debug.img 。為了引導GSI圖片,請總是從包含多達最新sepolicy變化android11-gsi分支重建你的boot-debug.imgvendor_boot-debug.img

另外,該repack_bootimg工具可以用來重建boot-debug.imgvendor_boot-debug.img與更新GSI sepolicy。

重新打包調試 ramdisk

相反,結合sepolicy更改重建的boot-debug.img ,合作夥伴可以使用repack_bootimg更新GSI sepolicy文件到boot-debug.img (或vendor_boot-debug.img如果設備使用GKI)。

步驟如下:

  1. 下載otatools.ziphttps://ci.android.com 。我們建議從生成工件下載aosp_arm64-userdebugaosp-master

  2. 安裝程序執行環境repack_bootimg

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. 下載userdebug_plat_sepolicy.cilboot-with-debug-ramdisk-${KERNEL_VERSION}.img從你使用的是GSI的構建。例如,如果您使用的是Google arm64 GSI RJR1.211020.001 (7840830)然後從下載https://ci.android.com/builds/submitted/ 7840830 / aosp_arm64用戶/最新

  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可以根據設備的配置進行調整。請參閱下一節詳細解釋。

userdebug sepolicy 的路徑

上述repack_bootimg拷貝文件userdebug_plat_sepolicy.cil從ramdisk上--src_bootimg到的RAMDISK --dst_bootimg 。但是,在不同的 Android 版本中,調試 ramdisk 中的路徑可能會有所不同。在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在內核的命令行。下表顯示了不同 Android 版本中調試 ramdisk 中的路徑。

調試圖像安卓 10安卓 11安卓 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
特定於設備的 vendor_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.imgfirst_stage_ramdisk/userdebug_plat_sepolicy.cil一個Android 11內vendor_boot-debug.img

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鏈分區,一個AVB頁腳需要運行後加入repack_bootimg命令。

例如,在運行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