ตั้งแต่ 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.img
vendor_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 otatools
export 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 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
ได้ตามการกำหนดค่าอุปกรณ์ ดูคำอธิบายโดยละเอียดได้ในส่วนถัดไป
เส้นทางของ 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 root
adb 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