從 Android 10 開始,用於運行CTS-on-GSI/VTS合規性測試的通用系統映像(GSI) 從 userdebug 更改為用戶構建類型,以便進行發布簽名。這是 VTS 測試的一個問題,因為 VTS 需要adb root
才能運行,但adb root
在用戶構建設備上不可用。
引入調試 ramdisk(或調試引導映像)以在引導加載程序已解鎖的用戶構建設備上啟用adb root
。這通過對 CTS-on-GSI 和 VTS-on-GSI 使用相同的用戶構建 GSI system.img
來簡化測試流程。對於 STS 設置,仍然需要使用另一個 userdebug OEM system.img
。
下表顯示了 Android 10 中合規性測試的映像和構建類型更改。
測試套件 | 測試 | 建造 | 調試虛擬磁盤 | 亞行根? | Android 9 -> 10 構建變體更改 |
---|---|---|---|---|---|
中旅 | OEM系統 | 用戶 | ñ | ñ | 不用找了 |
CTS-on-GSI | GSI | 用戶 | ñ | ñ | 用戶調試 -> 用戶 GSI 發布簽名 |
STS | OEM系統 | 用戶調試 | ñ | 是 | Q中的新功能 |
VTS | GSI | 用戶 | 是 | 是 | 用戶調試 -> 用戶 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)。
對於使用具有vendor_boot
分區的設備的通用內核映像 (GKI) ,不得刷新boot-debug.img
,因為必須使用經過認證的 GKI 映像來刷新boot
分區。相反vendor_boot-debug.img
應該被刷入vendor_boot
分區,以便於調試 ramdisk。
使用調試 ramdisk 的先決條件
調試 ramdisk 由運行合規性測試的 OEM 提供。它不能是發布簽名的,並且只能在設備解鎖時使用。
調試 ramdisk 不會生成或用於升級設備:
-
BOARD_BUILD_SYSTEM_ROOT_IMAGE
真 - 內核命令行中的
skip_initramfs
安卓 12 GSI
使用帶有 Android 12 GSI 的調試 ramdisk 不需要額外的說明。
從 09/29/2021 開始,調試 ramdisk 不再需要使用repack_bootimg
工具進行更新。在SGR1.210929.001 (7777720)
之後構建的 Android 12 GSI 在其system.img
中合併了最新的userdebug_plat_sepolicy.cil
文件,並忽略了調試 ramdisk 中的userdebug_plat_sepolicy.cil
。有關詳細信息,請參閱CL 。
安卓 11 GSI
當使用boot-debug.img
或vendor_boot-debug.img
時,系統 sepolicy 從boot-debug.img
或vendor_boot-debug.img
的調試 ramdisk 中的userdebug_plat_sepolicy.cil
文件加載。為了啟動 GSI 映像,請始終合併來自android11-gsi
分支的最新 sepolicy 更改以重建您的boot-debug.img
或vendor_boot-debug.img
。
或者, repack_bootimg
工具可用於使用更新的 GSI sepolicy 重建boot-debug.img
或vendor_boot-debug.img
debug.img。
重新打包調試 ramdisk
合作夥伴可以使用repack_bootimg
將 GSI sepolicy 文件更新為boot-debug.img
(或vendor_boot-debug.img
,如果設備使用 GKI),而不是合併 sepolicy 更改來重建boot-debug.img
。
步驟如下:
從https://ci.android.com下載
otatools.zip
。我們建議從 aosp-aosp-master
上的aosp_arm64-userdebug
構建工件下載。設置
repack_bootimg
的執行環境:unzip otatools.zip -d otatools
export PATH="${PWD}/otatools/bin:${PATH}"
repack_bootimg --help
從您正在使用的 GSI 構建中下載
userdebug_plat_sepolicy.cil
或boot-with-debug-ramdisk-${KERNEL_VERSION}.img
。例如,如果您使用RJR1.211020.001 (7840830)
中的 arm64 GSI,則從https://ci.android.com/builds/submitted/ 7840830 /aosp_arm64-user/latest下載。使用 userdebug_plat_sepolicy.cil 更新設備
boot-debug.img
或vendor_boot-debug.img
userdebug_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
從--dst_bootimg
的 ramdisk 複製到--src_bootimg
的 ramdisk。但是,調試 ramdisk 中的路徑在不同的 Android 版本中可能會有所不同。在 Android 10 和 11 中,對於內核命令行中androidboot.force_normal_boot=1
的設備,路徑為first_stage_ramdisk/userdebug_plat_sepolicy.cil
。否則,路徑為userdebug_plat_sepolicy.cil
。
運行以下命令檢查內核命令行中是否有androidboot.force_normal_boot
:
adb root
adb shell cat /proc/cmdline | grep force_normal_boot
從 Android 12 開始,無論內核命令行中是否存在androidboot.force_normal_boot=1
,調試 ramdisk 中的路徑始終為userdebug_plat_sepolicy.cil
。下表顯示了不同 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.img
到 Android 11 vendor_boot-debug.img
中的first_stage_ramdisk/userdebug_plat_sepolicy.cil
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
添加 AVB 頁腳
如果傳遞給--dst_bootimg
的映像配置為AVB 鍊式分區,則需要在運行repack_bootimg
命令後添加 AVB 頁腳。
例如,在運行repack_bootimg
之前,運行以下命令來檢查vendor_boot-debug.img
是否具有鍊式 AVB 頁腳。
avbtool info_image --image vendor_boot-debug.img
如果它最初具有鍊式 AVB 頁腳,則需要在運行repack_bootimg
命令後添加 AVB 頁腳。使用任何測試密鑰對vendor_boot-debug.img
進行簽名是有效的,因為調試 ramdisk 只能在設備解鎖時使用,這允許在boot
或vendor_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