นับตั้งแต่ Android 10
อิมเมจระบบทั่วไป (GSI) ที่ใช้เพื่อเรียกใช้
เปลี่ยนการทดสอบการปฏิบัติตามข้อกำหนดของ CTS-on-GSI/VTS แล้ว
จาก userdebug ไปยังประเภทบิลด์ของผู้ใช้เพื่อให้มีการลงนามการเผยแพร่ นี่คือ
ปัญหาสำหรับการทดสอบ VTS เพราะ VTS ต้องใช้
adb root
เพื่อเรียกใช้ แต่
adb root
ไม่พร้อมใช้งานในอุปกรณ์บิลด์ผู้ใช้
มีการนำการแก้ไขข้อบกพร่องของ RAM ดิสก์ (หรืออิมเมจการเปิดเครื่องสำหรับแก้ไขข้อบกพร่อง) มาใช้เพื่อเปิดใช้ adb root
ใน
อุปกรณ์บิลด์ผู้ใช้ที่เป็นเจ้าของ Bootloader
ปลดล็อกแล้ว วิธีนี้จะทำให้การทดสอบง่ายขึ้น
โดยการใช้บิลด์ GSI system.img
ของผู้ใช้เดียวกันสำหรับ CTS-on-GSI และ
VTS บน GSI สำหรับการตั้งค่า STS การใช้การแก้ไขข้อบกพร่องของผู้ใช้ OEM system.img
รายอื่นยังคงยังคงอยู่
ต้องระบุ
ตารางต่อไปนี้แสดงการเปลี่ยนแปลงรูปภาพและประเภทบิลด์สำหรับการทดสอบการปฏิบัติตามข้อกำหนดใน Android 10
ชุดทดสอบ | ทดสอบกับ | สร้าง | แก้ไขข้อบกพร่อง RAM | ราก adb | Android 9 -> มีการเปลี่ยนแปลงตัวแปรบิลด์ 10 รายการ |
---|---|---|---|---|---|
CTS | ระบบของ OEM | ผู้ใช้ | ไม่ใช่ | ไม่ใช่ | ไม่มีการเปลี่ยนแปลง |
CTS ใน GSI | GSI | ผู้ใช้ | ไม่ใช่ | ไม่ใช่ | การแก้ไขข้อบกพร่องของผู้ใช้ -> ผู้ใช้ GSI ลงนามในผลงานแล้ว |
STS | ระบบของ OEM | การแก้ไขข้อบกพร่องของผู้ใช้ | ไม่ใช่ | Y | ใหม่ใน Q |
VTS | GSI | ผู้ใช้ | Y | Y | แก้ไขข้อบกพร่องของผู้ใช้ -> ผู้ใช้ GSI ลงนามในผลงานแล้ว |
ภาพรวม
ไฟล์ภาพเพิ่มเติมเหล่านี้สร้างขึ้นในโฟลเดอร์บิลด์
(${ANDROID_PRODUCT_OUT}
):
boot-debug.img
vendor_boot-debug.img
เมื่อ boot-debug.img
กะพริบในพาร์ติชัน boot
ของอุปกรณ์
userdebug ของไฟล์นโยบายระบบและไฟล์พร็อพเพอร์ตี้เพิ่มเติม
โหลด adb_debug.prop
แล้ว การดำเนินการนี้ช่วยให้ adb root
ที่มีบิลด์ผู้ใช้
system.img
(ของ GSI หรือ OEM)
สำหรับ
อิมเมจเคอร์เนลทั่วไป (GKI)
ใช้อุปกรณ์ที่มีพาร์ติชัน vendor_boot
boot-debug.img
ต้องไม่มี
กะพริบ เนื่องจากพาร์ติชัน boot
ต้องกะพริบด้วยอิมเมจ GKI ที่ได้รับการรับรอง
ควรกะพริบ vendor_boot-debug.img
บน vendor_boot
แทน
เพื่ออำนวยความสะดวกในการแก้ไขข้อบกพร่อง ramdisk
ข้อกำหนดเบื้องต้นในการใช้ RAMdisk สำหรับการแก้ไขข้อบกพร่อง
RAM การแก้ไขข้อบกพร่องนั้นมาจาก OEM ที่ทำการทดสอบการปฏิบัติตามข้อกำหนด ทั้งนี้ ต้องไม่มีที่เซ็นชื่อกำกับรุ่น และจะใช้ได้เฉพาะเมื่ออุปกรณ์ปลดล็อกอยู่เท่านั้น
ระบบจะไม่สร้างหรือใช้ RAM สำหรับแก้ไขข้อบกพร่องในการอัปเกรดอุปกรณ์ที่มีรายการต่อไปนี้
BOARD_BUILD_SYSTEM_ROOT_IMAGE
ถูกskip_initramfs
ในบรรทัดคำสั่งของเคอร์เนล
Android 12 GSI
ไม่ต้องมีคำแนะนำเพิ่มเติมในการใช้ RAM แก้ไขข้อบกพร่องกับ Android 12 GSI
ตั้งแต่วันที่ 29/09/2021 เป็นต้นไป RAM การแก้ไขข้อบกพร่องจะไม่ต้องอัปเดตด้วยเมธอด
repack_bootimg
Android 12 GSI
บิลด์หลังจาก SGR1.210929.001 (7777720)
มีการใช้เวอร์ชันล่าสุด
userdebug_plat_sepolicy.cil
ไฟล์ใน system.img
และละเว้น
userdebug_plat_sepolicy.cil
จาก RAM การแก้ไขข้อบกพร่อง โปรดดู
CL สำหรับ
รายละเอียด
Android 11 GSI
เมื่อใช้ boot-debug.img
หรือ vendor_boot-debug.img
ระบบจะ
โหลด sepolicy จากไฟล์ userdebug_plat_sepolicy.cil
ในการแก้ไขข้อบกพร่อง
ramdisk ของ boot-debug.img
หรือ vendor_boot-debug.img
ในการเปิดเครื่อง GSI
โปรดรวมการเปลี่ยนแปลง sepolicy ล่าสุดจาก
android11-gsi
Branch เพื่อสร้าง boot-debug.img
หรือ vendor_boot-debug.img
ของคุณใหม่
หรือจะใช้เครื่องมือ repack_bootimg
เพื่อสร้าง
boot-debug.img
หรือ vendor_boot-debug.img
ที่มีนโยบาย GSI ที่อัปเดตแล้ว
แพ็ค RAM การแก้ไขข้อบกพร่องอีกครั้ง
พาร์ทเนอร์แทนที่จะรวมการเปลี่ยนแปลงนโยบายเพื่อสร้าง boot-debug.img
ใหม่
ใช้ repack_bootimg
เพื่ออัปเดตไฟล์ sepolicy ของ GSI เป็น boot-debug.img
ได้
(หรือ vendor_boot-debug.img
หากอุปกรณ์ใช้ GKI)
ขั้นตอนมีดังนี้
ดาวน์โหลด
otatools.zip
จาก https://ci.android.com เราขอแนะนำให้ดาวน์โหลดจากอาร์ติแฟกต์ของบิลด์ของ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 ที่คุณเป็น ด้วย เช่น หากคุณใช้ arm64 GSI จาก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 ในการแก้ไขข้อบกพร่อง
repack_bootimg
ข้างต้นคัดลอกไฟล์ userdebug_plat_sepolicy.cil
จาก
ramdisk ของ --src_bootimg
ไปยัง RAM ของ --dst_bootimg
อย่างไรก็ตาม เส้นทาง
ภายใน RAM การแก้ไขข้อบกพร่องอาจแตกต่างออกไปใน 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
ในบรรทัดคำสั่งของเคอร์เนล ดังต่อไปนี้
ตารางแสดงเส้นทางภายใน RAM การแก้ไขข้อบกพร่องใน Android เวอร์ชันต่างๆ
รูปภาพการแก้ไขข้อบกพร่อง | Android 10 | Android 11 | Android 12 |
---|---|---|---|
GKI บูตพร้อมแก้ไขข้อบกพร่อง-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 |
provider_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
after เรียกใช้คำสั่ง repack_bootimg
การใช้คีย์ทดสอบเพื่อลงชื่อ
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