בדיקת VTS עם באגים ramdisk

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

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

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

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

userdebug -> משתמש GSI

שחרור חתום

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

userdebug -> משתמש GSI

שחרור חתום

סקירה כללית

קובצי תמונה נוספים אלה נוצרים תחת תיקיית ה-build ( ${ANDROID_PRODUCT_OUT} ):

  • boot-debug.img
  • vendor_boot-debug.img

כאשר boot-debug.img מופעל על מחיצת boot של ההתקן, נטענים גרסת userdebug של קובץ ה-sepolicy של המערכת וקובץ מאפיין נוסף, adb_debug.prop . זה מאפשר adb root עם ה-user build system.img (או GSI או OEM).

עבור תמונת ליבה כללית (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 בשורת הפקודה של הקרנל

אנדרואיד 12 GSI

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

החל מה-29/09/2021, לא צריך עוד לעדכן תקלות באגים של ramdisks עם הכלי repack_bootimg . בניית Android 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 ב-ramdisk באגים של boot-debug.img או vendor_boot-debug.img . על מנת לאתחל תמונות GSI, נא לשלב תמיד שינויים עדכניים במדיניות של android11-gsi כדי לבנות מחדש boot-debug.img או vendor_boot-debug.img שלך.

לחלופין, ניתן להשתמש בכלי repack_bootimg לבנייה מחדש של boot-debug.img או vendor_boot-debug.img עם GSI sepolicy מעודכן.

ארוז מחדש רמדיסק באגים

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

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

  1. הורד את otatools.zip מ- https://ci.android.com . אנו ממליצים להוריד מ-build artifacts של aosp_arm64-userdebug ב- aosp-main .

  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 build שבו אתה משתמש. לדוגמה, אם אתה משתמש ב-arm64 GSI מ- RJR1.211020.001 (7840830) , הורד מ- https://ci.android.com/builds/submitted/ 7840830 /aosp_arm64-user/latest .

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

הנתיב של userdebug sepolicy

ה- 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 בשורת הפקודה של הליבה. אחרת, הנתיב הוא userdebug_plat_sepolicy.cil .

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

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

החל מאנדרואיד 12, הנתיב בתוך ramdisk באגים הוא תמיד userdebug_plat_sepolicy.cil , ללא קשר לקיומו של androidboot.force_normal_boot=1 בשורת הפקודה של הליבה. הטבלה הבאה מציגה את הנתיבים ב-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 מ-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

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