בדיקת VTS עם Debug Ramdisk

מאז 10 אנדרואיד, תמונת המערכה גנרי (GSI) המשמשת להפעלת CTS-על-GSI / VTS בדיקות תאימות השתנו מן userdebug לסוג לבנות המשתמשים על מנת להיחתם שחרורו. זוהי בעיה לבדיקה VTS בגלל VTS דורש adb root לרוץ, אבל adb root אינו זמין בהתקן לבנות המשתמשים.

באגים ramdisk (או תמונת האתחול debug) הוא הציג לאפשר adb root על מכשיר לבנות המשתמשים מנהל האיתחול שלו הוא נעול . זה מפשט את זרימת בדיקות באמצעות אותו משתמש לבנות GSI system.img עבור CTS-על-GSI ו VTS-על-GSI. עבור ההתקנה STS, באמצעות אחר userdebug OEM system.img עדיין נדרשת.

הטבלה הבאה מציגה שינויים בסוג תמונה ומבנה עבור בדיקות תאימות ב-Android 10.

חבילת בדיקות בדוק עם לִבנוֹת איתור באגים של רמדיסק שורש adb? אנדרואיד 9 -> 10 שינוי גרסת בנייה
CTS מערכת OEM מִשׁתַמֵשׁ נ נ ללא שינוי
CTS-on-GSI GSI מִשׁתַמֵשׁ נ נ

userdebug -> משתמש GSI

שחרור חתום

STS מערכת OEM userdebug נ י חדש ב-Q
VTS GSI מִשׁתַמֵשׁ י י

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).

לקבלת תמונת Kernel גנרי (GKI) באמצעות מכשירים בעלי vendor_boot מחיצה, boot-debug.img אסור הבזיק, כמו boot המחיצה חייבת להיות הבזיקה עם תמונת GKI מוסמכת. במקום vendor_boot-debug.img יש הבזיק על vendor_boot מחיצה כדי להקל באגים ramdisk.

תנאים מוקדמים לשימוש ב-ramdisk באגים

ה-ramdisk לניפוי באגים מסופק על ידי ה-OEM המריץ את בדיקות התאימות. אסור שהוא יהיה חתום על שחרור, וניתן להשתמש בו רק אם המכשיר אינו נעול.

רמדיסק ניפוי הבאגים לא יווצר ולא יעשה בו שימוש לשדרוג התקנים עם:

  • BOARD_BUILD_SYSTEM_ROOT_IMAGE נכון
  • skip_initramfs ב שורת הפקודה kernel

אנדרואיד 12 GSI

אין צורך בהוראה נוספת כדי להשתמש ב-ramdisk באגים עם Android 12 GSI.

החל מ 2021/09/29, ramdisks באגים כבר לא תידרש לעדכן עם repack_bootimg כלי. אנדרואיד 12 GSI לבנות לאחר SGR1.210929.001 (7777720) משלבת את עַדכָּנִי userdebug_plat_sepolicy.cil הקובץ שלה system.img וההתעלמויות userdebug_plat_sepolicy.cil מן ramdisk באגים. עיין CLS לפרטים.

אנדרואיד 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 עם sepolicy GSI מעודכנת.

אריזה מחדש של ramdisk באגים

במקום שילוב שינויים sepolicy לשקם boot-debug.img , שותפים יכולים להשתמש repack_bootimg לעדכן את הקובץ sepolicy GSI לתוך boot-debug.img (או vendor_boot-debug.img אם ההתקן משתמש GKI).

השלבים הם כדלקמן:

  1. הורד otatools.zip מן https://ci.android.com . אנחנו ממליצים להוריד מן החפצים הלבנים של aosp_arm64-userdebug על aosp-master .

  2. הגדרת סביבת הביצוע עבור repack_bootimg :

    unzip otatools.zip -d otatools
    export PATH="${PWD}/otatools/bin:${PATH}"
    repack_bootimg --help
    
  3. הורד את userdebug_plat_sepolicy.cil או boot-with-debug-ramdisk-${KERNEL_VERSION}.img מן לבנות GSI אתה משתמש. לדוגמה, אם אתה משתמש arm64 GSI מן RJR1.211020.001 (7840830) , ולאחר מכן להוריד מ https://ci.android.com/builds/submitted/ 7,840,830 / aosp_arm64 משתמש / האחרונה .

  4. עדכון המכשיר 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 יכולים להיות מותאמים לפי תצורות המכשיר. עיין בסעיף הבא עבור הסבר מפורט.

נתיב הספוליס של משתמש החרקים

האמור לעיל repack_bootimg קובץ עותקים userdebug_plat_sepolicy.cil מן ramdisk של --src_bootimg אל ramdisk של --dst_bootimg . עם זאת, הנתיב בתוך רמדדיסק באגים עשוי להיות שונה בגרסאות אנדרואיד שונות. בשנת אנדרואיד 10 ו 11, הנתיב הוא first_stage_ramdisk/userdebug_plat_sepolicy.cil עבור מכשירים עם androidboot.force_normal_boot=1 בשורת הפקודה kernel. אחרת, הנתיב הוא userdebug_plat_sepolicy.cil .

הפעל את הפקודה הבאה כדי לבדוק אם יש androidboot.force_normal_boot בשורת הפקודה kernel:

adb root
adb shell cat /proc/cmdline | grep force_normal_boot

החל מ 12 אנדרואיד, מהנתיב בתוך ramdisk debug הוא תמיד userdebug_plat_sepolicy.cil , ללא קשר לקיומו של androidboot.force_normal_boot=1 בשורת הפקודה kernel. הטבלה הבאה מציגה את הנתיבים ב-ramdisk באגים בגרסאות אנדרואיד שונות.

איתור באגים בתמונה אנדרואיד 10 אנדרואיד 11 אנדרואיד 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 מתוך 11 אנדרואיד boot-with-debug-ramdisk-5.4.img כדי first_stage_ramdisk/userdebug_plat_sepolicy.cil בתוך אנדרואיד 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

אם התמונה עברה --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