自 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 中用於法規遵循測試的映像檔和建構類型變更。
測試套件 | 測試代理程式 | 建構 | 偵錯 ramdisk | ADB 根? | Android 9 -> 10 建構變化版本變更 |
---|---|---|---|---|---|
CTS | 原始設備製造商 (OEM) 的系統 | 使用者 | 否 | 否 | 沒有變化 |
CTS-on-GSI | GSI | 使用者 | 否 | 否 | userdebug -> user GSI 已簽署的發布版本 |
STS | 原始設備製造商 (OEM) 的系統 | 使用者偵錯 | 否 | 是 | 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
分區,以便偵錯 ramdisk。
使用偵錯 ramdisk 的必要條件
偵錯 ramdisk 是由執行法規遵循測試的原始設備製造商 (OEM) 提供。該應用程式不得簽署發布,且只能在裝置解鎖時使用。
以下裝置不會產生偵錯 RAM 磁碟,也無法用於升級裝置:
BOARD_BUILD_SYSTEM_ROOT_IMAGE
是- 核心指令列中的
skip_initramfs
Android 12 GSI
在 Android 12 GSI 中使用偵錯 ramdisk 時不需要額外指示。
自 2021 年 9 月 29 日起,您不再需要使用 repack_bootimg
工具更新偵錯 RAM 磁碟。Android 12 GSI 建構於 SGR1.210929.001 (7777720)
後,將最新的 userdebug_plat_sepolicy.cil
檔案納入其 system.img
中,並忽略偵錯 ramdisk 中的 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-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
的引數。如需詳細說明,請參閱下一節。
使用者偵錯政策的路徑
上述 repack_bootimg
會將檔案 userdebug_plat_sepolicy.cil
從 --src_bootimg
的 ramdisk 複製到 --dst_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 版本中偵錯 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