自 Android 10 起,用於執行 CTS-on-GSI/VTS 相容性測試的通用系統映像檔 (GSI) 已從 userdebug 變更為 user 版本類型,以便進行發布簽署。這會導致 VTS 測試出現問題,因為 VTS 需要 adb root
才能執行,但 adb root
無法在使用者建構的裝置上使用。
偵錯 ramdisk (或偵錯開機映像檔) 的目的是在已解鎖系統啟動載入程式的使用者建構裝置上啟用 adb root
。這樣一來,您就能使用相同的使用者建構 GSI system.img
,為 GSI 上的 CTS 和 GSI 上的 VTS 簡化測試流程。對於 STS 設定,仍須使用其他 userdebug OEM system.img
。
下表列出 Android 10 中用於法規遵循測試的映像檔和建構類型變更。
測試套件 | 測試代理程式 | 建構 | 偵錯 RAM 磁碟 | ADB 根目錄? | Android 9 -> 10 建構變化版本變更 |
---|---|---|---|---|---|
CTS | 原始設備製造商 (OEM) 的系統 | 使用者 | 否 | 否 | 沒有變化 |
CTS-on-GSI | GSI | 使用者 | 否 | 否 | userdebug -> user GSI 已簽署的發布版本 |
STS | 原始設備製造商 (OEM) 的系統 | userdebug | 否 | 是 | Q 的新功能 |
VTS | GSI | 使用者 | 是 | 是 | userdebug -> user 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) 就必須使用經過認證的 GKI 映像檔來刷新 boot
分區,因此請勿刷新 boot-debug.img
。請改為將 vendor_boot-debug.img
刷新至 vendor_boot
分割區,以利對 RAM 磁碟機進行偵錯。
使用偵錯 RAM 磁碟區的先決條件
執行法規遵循測試的原始設備製造商 (OEM) 會提供偵錯 RAM 磁碟。該應用程式不得簽署發布,且只能在裝置解鎖時使用。
以下裝置不會產生偵錯 RAM 磁碟,也不會用於升級裝置:
BOARD_BUILD_SYSTEM_ROOT_IMAGE
true- 核心指令列中的
skip_initramfs
Android 12 GSI
您不需要額外指示,即可使用 Android 12 GSI 的偵錯 RAM 磁碟。
自 2021 年 9 月 29 日起,您不再需要使用 repack_bootimg
工具更新偵錯 RAM 磁碟。SGR1.210929.001 (7777720)
在其 system.img
中納入最新的 userdebug_plat_sepolicy.cil
檔案後,Android 12 GSI 版本會忽略偵錯 RAM 磁碟中的 userdebug_plat_sepolicy.cil
。詳情請參閱「CL」。
Android 11 GSI
使用 boot-debug.img
或 vendor_boot-debug.img
時,系統會從 boot-debug.img
或 vendor_boot-debug.img
的偵錯 ramdisk 中的 userdebug_plat_sepolicy.cil
檔案載入系統 sepolicy。為了啟動 GSI 映像檔,請務必從 android11-gsi
分支中納入最新的 sepolicy 變更,以便重建 boot-debug.img
或 vendor_boot-debug.img
。
或者,您也可以使用 repack_bootimg
工具,以更新的 GSI 安全政策重建 boot-debug.img
或 vendor_boot-debug.img
。
重新打包偵錯 RAMDISK
合作夥伴可以使用 repack_bootimg
將 GSI 安全政策檔案更新至 boot-debug.img
(如果裝置使用 GKI,則為 vendor_boot-debug.img
),而非納入安全政策變更來重建 boot-debug.img
。
步驟如下:
請從 https://ci.android.com 下載
otatools.zip
。建議您從aosp-main
上的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
: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
從 --src_bootimg
的 RAM 磁碟複製到 --dst_bootimg
的 RAM 磁碟。不過,不同 Android 版本的偵錯 RAM 磁碟機路徑可能不同。在 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
,偵錯 RAM 磁碟區中的路徑一律為 userdebug_plat_sepolicy.cil
。下表列出不同 Android 版本中偵錯 RAM 磁碟機內的路徑。
偵錯圖片 | 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 |
裝置專屬 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
。
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
都會成功,因為只有在裝置解鎖時才能使用偵錯 RAM 磁碟,因此可在 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