ตั้งแต่ Android 10 เป็นต้นมา Generic System Image (GSI) ที่ใช้ในการรันการทดสอบการปฏิบัติตามข้อกำหนด ของ CTS-on-GSI/VTS ได้เปลี่ยนจาก userdebug เป็นประเภทบิลด์ผู้ใช้เพื่อที่จะลงนามในการเปิดตัว นี่เป็นปัญหาสำหรับการทดสอบ VTS เนื่องจาก VTS ต้องใช้ adb root
จึงจะทำงาน แต่ adb root
ไม่พร้อมใช้งานบนอุปกรณ์ที่ผู้ใช้สร้างขึ้น
มีการแนะนำ debug ramdisk (หรือดีบักอิมเมจสำหรับบูต) เพื่อเปิดใช้งาน adb root
บนอุปกรณ์สร้างผู้ใช้ที่ ปลดล็อค bootloader ซึ่งช่วยลดความยุ่งยากในขั้นตอนการทดสอบโดยใช้ GSI system.img
ที่สร้างโดยผู้ใช้คนเดียวกันสำหรับ CTS-on-GSI และ VTS-on-GSI สำหรับการตั้งค่า STS ยังคงจำเป็นต้องใช้ userdebug OEM system.img
อื่น
ตารางต่อไปนี้แสดงการเปลี่ยนแปลงประเภทอิมเมจและบิวด์สำหรับการทดสอบการปฏิบัติตามข้อกำหนดใน Android 10
ชุดทดสอบ | ทดสอบด้วย | สร้าง | ดีบักแรมดิสก์ | รูต adb? | Android 9 -> 10 การเปลี่ยนแปลงตัวแปรบิวด์ |
---|---|---|---|---|---|
ซีทีเอส | ระบบ OEM | ผู้ใช้ | เอ็น | เอ็น | ไม่มีการเปลี่ยนแปลง |
CTS บน GSI | จีเอสไอ | ผู้ใช้ | เอ็น | เอ็น | userdebug -> ผู้ใช้ GSI ลงนามปล่อย |
เอสทีเอส | ระบบ OEM | การแก้ไขข้อบกพร่องของผู้ใช้ | เอ็น | ย | ใหม่ใน Q |
วีทีเอส | จีเอสไอ | ผู้ใช้ | ย | ย | userdebug -> ผู้ใช้ GSI ลงนามปล่อย |
ภาพรวม
ไฟล์ภาพเพิ่มเติมเหล่านี้ถูกสร้างขึ้นภายใต้โฟลเดอร์บิลด์ ( ${ANDROID_PRODUCT_OUT}
):
-
boot-debug.img
-
vendor_boot-debug.img
เมื่อ boot-debug.img
ถูกแฟลชไปยังพาร์ติชันสำหรับ boot
ของอุปกรณ์ เวอร์ชัน userdebug ของไฟล์ sepolicy ของระบบและไฟล์คุณสมบัติเพิ่มเติม 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
ข้อกำหนดเบื้องต้นสำหรับการใช้ debug ramdisk
ramdisk ดีบักนั้นจัดทำโดย OEM ที่ทำการทดสอบการปฏิบัติตามข้อกำหนด จะต้องไม่มีการลงชื่อเผยแพร่ และสามารถใช้ได้เฉพาะเมื่ออุปกรณ์ถูกปลดล็อคแล้วเท่านั้น
ramdisk ดีบักจะไม่ถูกสร้างขึ้นหรือใช้สำหรับการอัพเกรดอุปกรณ์ด้วย:
-
BOARD_BUILD_SYSTEM_ROOT_IMAGE
จริง -
skip_initramfs
ในบรรทัดคำสั่งเคอร์เนล
ระบบปฏิบัติการ Android 12 GSI
ไม่จำเป็นต้องมีคำแนะนำเพิ่มเติมเพื่อใช้ debug ramdisk กับ Android 12 GSI
ตั้งแต่วันที่ 29/09/2021 เป็นต้นไป การดีบัก ramdisk ไม่จำเป็นต้องอัปเดตด้วยเครื่องมือ repack_bootimg
อีกต่อไป Android 12 GSI บิวด์หลัง SGR1.210929.001 (7777720)
รวมไฟล์ userdebug_plat_sepolicy.cil
ที่เป็นปัจจุบันไว้ใน system.img
และละเว้น userdebug_plat_sepolicy.cil
จาก ramdisk ดีบัก ดู CL สำหรับรายละเอียด
ระบบปฏิบัติการ Android 11 GSI
เมื่อใช้ 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
ใหม่ด้วย GSI sepolicy ที่อัปเดตแล้ว
บรรจุ ramdisk ดีบักใหม่
แทนที่จะรวมการเปลี่ยนแปลง sepolicy เพื่อสร้าง boot-debug.img
ใหม่ พันธมิตรสามารถใช้ repack_bootimg
เพื่ออัปเดตไฟล์ sepolicy GSI เป็น boot-debug.img
(หรือ vendor_boot-debug.img
หากอุปกรณ์ใช้ GKI)
ขั้นตอนมีดังนี้:
ดาวน์โหลด
otatools.zip
จาก https://ci.android.com เราขอแนะนำให้ดาวน์โหลดจาก build artifact ของaosp_arm64-userdebug
บนaosp-main
ตั้งค่าสภาพแวดล้อมการดำเนินการสำหรับ
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 build ที่คุณใช้อยู่ ตัวอย่างเช่น หากคุณใช้ arm64 GSI จากRJR1.211020.001 (7840830)
ให้ดาวน์โหลดจาก https://ci.android.com/builds/submit/ 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 เส้นทางภายใน ramdisk ดีบักจะเป็น userdebug_plat_sepolicy.cil
เสมอ โดยไม่คำนึงถึงการมีอยู่ของ androidboot.force_normal_boot=1
ในบรรทัดคำสั่งเคอร์เนล ตารางต่อไปนี้แสดงเส้นทางภายใน ramdisk ดีบักใน Android เวอร์ชันต่างๆ
แก้ไขข้อบกพร่องรูปภาพ | แอนดรอยด์ 10 | แอนดรอยด์ 11 | แอนดรอยด์ 12 |
---|---|---|---|
GKI บูตด้วย-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
ใช้งานได้เนื่องจาก 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