בדיקת VTS באמצעות ramdisk של ניפוי באגים

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

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

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

חבילת בדיקות בדיקה עם Build ניפוי באגים ב-ramdisk adb root? Android 9 -> שינוי של 10 וריאנטים של build
CTS מערכת ה-OEM משתמש לא לא ללא שינוי
CTS-on-GSI GSI משתמש לא לא

userdebug -> GSI של משתמש

הגרסה חתומה

STS מערכת ה-OEM ניפוי באגים ברמת המשתמש לא Y חדש ב-Q
VTS GSI משתמש Y Y

userdebug -> GSI של משתמש

הגרסה חתומה

סקירה כללית

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

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

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

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

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

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

RAMdisk של ניפוי הבאגים לא ייווצר ולא ישמש לשדרוג מכשירים עם:

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

Android 12 GSI

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

החל מ-29/09/2021, אין יותר צורך לעדכן ramdisk עם ניפוי באגים באמצעות repack_bootimg. Android 12 GSI build אחרי SGR1.210929.001 (7777720) כולל את קובץ userdebug_plat_sepolicy.cil ב-system.img שלו והתעלמות userdebug_plat_sepolicy.cil מ-ramdisk של ניפוי באגים. לצפייה CLs עבור פרטים.

Android 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 מעודכנת.

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

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

אלה השלבים:

  1. הורדה של otatools.zip מ- https://ci.android.com. מומלץ להוריד מפריטי ה-build של 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 מגרסת ה-build של GSI באמצעות. לדוגמה, אם אתם משתמשים בזרוע 64 GSI מ- RJR1.211020.001 (7840830), ולאחר מכן הורדה מ: https://ci.android.com/builds/submitted/7840830/aosp_arm64-user/previous.

  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 סולם של --src_bootimg ל-Radisk של --dst_bootimg. אבל הנתיב ב-ramdisk של ניפוי באגים עשויים להיות שונים בגרסאות שונות של Android. לחשבון Android בגרסאות 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

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

תמונה של ניפוי באגים 10 Android Android 11 12 ‏Android
GKI start-with-debug-ramdisk-${KERNEL_VERSION}.img לא רלוונטי first_stage_ramdisk/userdebug_plat_sepolicy.cil userdebug_plat_sepolicy.cil
start-debug.img למכשיר ספציפי למכשיר תלוי ב-Force_natural_boot תלוי ב-Force_natural_boot userdebug_plat_sepolicy.cil
ספק_אתחול-debug.img ספציפי למכשיר לא רלוונטי תלוי ב-Force_natural_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 ב-vendor_boot-debug.img Android 11.

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 בשורת הפקודה בליבה (kernel), צריך לשנות את הפקודה כמו למטה כדי לשנות את נתיב היעד 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