自 Android 10 起,用於執行 CTS-on-GSI/VTS 相容性測試的通用系統映像檔 (GSI) 已從 userdebug 變更為 user 版本類型,以便進行發布簽署。這會導致 VTS 測試出現問題,因為 VTS 需要 adb root
才能執行,但 adb root
無法在使用者建構的裝置上使用。
偵錯 ramdisk (或偵錯開機映像檔) 的目的是在已解鎖系統啟動載入程式的使用者建構裝置上啟用 adb root
。這樣一來,您就能使用相同的使用者建構 GSI system.img
來測試 CTS-on-GSI 和 VTS-on-GSI,藉此簡化測試流程。對於 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
的偵錯 RAM 磁碟區中的 userdebug_plat_sepolicy.cil
檔案載入系統安全政策。為了啟動 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-android-latest-release
分支的aosp_cf_arm64_only_phone-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