ตั้งแต่ Android 10 เป็นต้นมา Generic System Image (GSI) ที่ใช้ในการทดสอบการปฏิบัติตามข้อกำหนด CTS-on-GSI/VTS ได้เปลี่ยนจากประเภทบิลด์ userdebug เป็น user เพื่อให้สามารถลงนามในการเผยแพร่ได้ นี่เป็นปัญหาสำหรับการทดสอบ VTS เนื่องจาก VTS ต้องใช้ adb root ในการเรียกใช้ แต่ adb root ไม่พร้อมใช้งานในอุปกรณ์ที่สร้างขึ้นสำหรับผู้ใช้
เราขอแนะนำ debug ramdisk (หรืออิมเมจการบูตสำหรับแก้ไขข้อบกพร่อง) เพื่อเปิดใช้ adb root ใน
อุปกรณ์ที่สร้างขึ้นสำหรับผู้ใช้ซึ่งมี Bootloader ที่ปลดล็อก ซึ่งจะช่วยลดความซับซ้อนของขั้นตอนการทดสอบ
โดยใช้ GSI system.img สำหรับ CTS-on-GSI และ
VTS-on-GSI ที่สร้างขึ้นสำหรับผู้ใช้เดียวกัน สำหรับการตั้งค่า STS คุณยังคงต้องใช้ OEM system.img userdebug อื่น
ตารางต่อไปนี้แสดงการเปลี่ยนแปลงประเภทรูปภาพและบิลด์สำหรับการทดสอบการปฏิบัติตามข้อกำหนดใน Android 10
| ชุดทดสอบ | ทดสอบด้วย | สร้าง | แก้ไขข้อบกพร่องของ Ramdisk | adb root? | การเปลี่ยนแปลงตัวแปรบิลด์จาก Android 9 เป็น 10 |
|---|---|---|---|---|---|
| CTS | ระบบของ OEM | ผู้ใช้ | N | N | ไม่มีการเปลี่ยนแปลง |
| CTS-on-GSI | GSI | ผู้ใช้ | N | N | userdebug -> user GSI เผยแพร่โดยมีลายเซ็น |
| STS | ระบบของ OEM | userdebug | N | Y | มีอะไรใหม่ใน Q |
| VTS | GSI | ผู้ใช้ | Y | Y | userdebug -> user GSI เผยแพร่โดยมีลายเซ็น |
ภาพรวม
ระบบจะสร้างไฟล์รูปภาพเพิ่มเติมเหล่านี้ในโฟลเดอร์บิลด์
(${ANDROID_PRODUCT_OUT})
boot-debug.imgvendor_boot-debug.img
เมื่อแฟลช boot-debug.img ลงในพาร์ติชัน boot ของอุปกรณ์ ระบบจะโหลดไฟล์ sepolicy ของระบบเวอร์ชัน userdebug และไฟล์พร็อพเพอร์ตี้เพิ่มเติม adb_debug.prop ซึ่งจะช่วยให้ adb root ที่มีบิลด์ของผู้ใช้
system.img (ไม่ว่าจะเป็น GSI หรือของ OEM)
สำหรับ
Generic Kernel Image (GKI)
ที่ใช้อุปกรณ์ที่มีพาร์ติชัน vendor_boot จะต้องไม่แฟลช boot-debug.img เนื่องจากต้องแฟลชพาร์ติชัน boot ด้วยอิมเมจ GKI ที่ได้รับการรับรอง
แต่ควรแฟลช vendor_boot-debug.img ไปยังพาร์ติชัน vendor_boot
เพื่อให้การดีบัก ramdisk เป็นไปได้
ข้อกำหนดเบื้องต้นในการใช้ Ramdisk สำหรับการแก้ไขข้อบกพร่อง
OEM ที่ทำการทดสอบการปฏิบัติตามข้อกำหนดจะเป็นผู้จัดเตรียม Ramdisk สำหรับการแก้ไขข้อบกพร่อง โดยต้องไม่ได้รับการลงนามรุ่น และจะใช้ได้ก็ต่อเมื่ออุปกรณ์ปลดล็อกแล้วเท่านั้น
ระบบจะไม่สร้างหรือใช้ debug ramdisk สำหรับการอัปเกรดอุปกรณ์ที่มีคุณสมบัติดังนี้
BOARD_BUILD_SYSTEM_ROOT_IMAGEจริงskip_initramfsในบรรทัดคำสั่งของเคอร์เนล
GSI ของ Android 12
คุณไม่จำเป็นต้องมีวิธีการเพิ่มเติมในการใช้ debug ramdisk กับ GSI ของ Android 12
ตั้งแต่วันที่ 29/09/2021 เป็นต้นไป คุณไม่จำเป็นต้องอัปเดต debug ramdisk ด้วยเครื่องมือ repack_bootimg อีกต่อไป GSI ของ Android 12
ที่สร้างหลังSGR1.210929.001 (7777720)จะรวมไฟล์ userdebug_plat_sepolicy.cil ที่อัปเดตล่าสุด
ไว้ใน system.img และไม่สนใจ userdebug_plat_sepolicy.cil จาก debug ramdisk ดูรายละเอียดได้ที่
CL
GSI ของ Android 11
เมื่อใช้ boot-debug.img หรือ vendor_boot-debug.img ระบบจะโหลด
sepolicy จากไฟล์ userdebug_plat_sepolicy.cil ใน debug
ramdisk ของ boot-debug.img หรือ vendor_boot-debug.img หากต้องการบูตอิมเมจ GSI โปรดรวมการเปลี่ยนแปลง sepolicy ล่าสุดจากสาขา
android11-gsi
เสมอเพื่อสร้าง boot-debug.img หรือ vendor_boot-debug.img ใหม่
หรือจะใช้เครื่องมือ repack_bootimg เพื่อสร้าง boot-debug.img หรือ vendor_boot-debug.img ใหม่ด้วย sepolicy ของ GSI ที่อัปเดตแล้วก็ได้
แพ็ก Ramdisk สำหรับการแก้ไขข้อบกพร่องอีกครั้ง
ซึ่งจำเป็นเมื่อใช้ GSI ของ Android 11 เท่านั้นพาร์ทเนอร์ไม่จำเป็นต้องรวมการเปลี่ยนแปลง sepolicy เพื่อสร้าง boot-debug.img ใหม่
แต่สามารถใช้ repack_bootimg เพื่ออัปเดตไฟล์ sepolicy ของ GSI เป็น boot-debug.img
(หรือ vendor_boot-debug.img หากอุปกรณ์ใช้ GKI)
ขั้นตอนมีดังนี้
ดาวน์โหลด
otatools.zipจาก https://ci.android.com เราขอแนะนำให้ดาวน์โหลดจากอาร์ติแฟกต์บิลด์ของaosp_cf_arm64_only_phone-userdebugในสาขาaosp-android-latest-releaseตั้งค่าสภาพแวดล้อมการดำเนินการสำหรับ
repack_bootimgดังนี้unzip otatools.zip -d otatoolsexport PATH="${PWD}/otatools/bin:${PATH}"repack_bootimg --helpดาวน์โหลด
userdebug_plat_sepolicy.cilหรือboot-with-debug-ramdisk-${KERNEL_VERSION}.imgจากบิลด์ GSI ที่คุณใช้ เช่น หากคุณใช้ GSI arm64 จากRJR1.211020.001 (7840830)ให้ดาวน์โหลดจาก https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/latestอัปเดตอุปกรณ์
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 GKIrepack_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}.imgrepack_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 GKIrepack_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ได้ตามการกำหนดค่าอุปกรณ์ ดูคำอธิบายโดยละเอียดได้ในส่วนถัดไป
เส้นทางของ sepolicy สำหรับ userdebug
คำสั่ง repack_bootimg ด้านบนจะคัดลอกไฟล์ userdebug_plat_sepolicy.cil จาก
ramdisk ของ --src_bootimg ไปยัง ramdisk ของ --dst_bootimg อย่างไรก็ตาม เส้นทาง
ภายใน Ramdisk สำหรับการแก้ไขข้อบกพร่องอาจแตกต่างกันใน Android แต่ละเวอร์ชัน ใน Android 10 และ 11 เส้นทางคือ
first_stage_ramdisk/userdebug_plat_sepolicy.cil สำหรับอุปกรณ์ที่มี
androidboot.force_normal_boot=1 ในบรรทัดคำสั่งเคอร์เนล ไม่เช่นนั้น เส้นทางจะเป็น userdebug_plat_sepolicy.cil
เรียกใช้คำสั่งต่อไปนี้เพื่อตรวจสอบว่ามี androidboot.force_normal_boot
ในบรรทัดคำสั่งของเคอร์เนลหรือไม่
adb rootadb shell cat /proc/cmdline | grep force_normal_boot
ตั้งแต่ Android 12 เป็นต้นไป เส้นทางภายใน debug
ramdisk จะเป็น userdebug_plat_sepolicy.cil เสมอ ไม่ว่าจะมี androidboot.force_normal_boot=1 ในบรรทัดคำสั่งของเคอร์เนลหรือไม่ก็ตาม ตารางต่อไปนี้แสดงเส้นทางภายใน ramdisk การแก้ไขข้อบกพร่องใน Android เวอร์ชันต่างๆ
| รูปภาพการแก้ไขข้อบกพร่อง | 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 ไปยัง
first_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เพิ่มส่วนท้ายของ AVB
หากกำหนดค่ารูปภาพที่ส่งไปยัง --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 จะใช้งานได้เนื่องจากใช้ debug 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