החל מ-Android 10, סוג ה-build של תמונת המערכת הכללית (GSI) ששימשה להרצת בדיקת התאימות של CTS-on-GSI/VTS השתנה מ-User-debug לסוג ה-build של המשתמש כדי להיכלל בחתימה. זו בעיה בבדיקת VTS, כי ל-VTS נדרשת הפעלה של adb root
, אבל השירות adb root
לא זמין במכשיר build של משתמש.
ה-ramdisk לניפוי באגים (או קובץ האימג' של ניפוי באגים) נועד להפעיל את adb root
במכשיר build של משתמש שתוכנת האתחול שלו לא נעולה. כך פשוט יותר לבצע את תהליך הבדיקה, כי משתמשים באותו GSI system.img
ל-CTS-on-GSI ול-VTS-on-GSI. כדי להגדיר את STS, עדיין צריך להשתמש ב-system.img
של OEM אחר עם userdebug.
בטבלה הבאה מוצגים השינויים בסוגים של קובצי אימג' ו-build לצורך בדיקת תאימות ב-Android 10.
חבילת בדיקות | בדיקה באמצעות | Build | ניפוי באגים ב-ramdisk | adb root? | שינוי של וריאנט build מ-Android 9 ל-10 |
---|---|---|---|---|---|
CTS | המערכת של יצרן הציוד המקורי | משתמש | לא | לא | ללא שינוי |
CTS-on-GSI | GSI | משתמש | לא | לא | userdebug -> user GSI הגרסה חתומה |
STS | המערכת של יצרן הציוד המקורי | userdebug | לא | Y | חדש ב-Q |
VTS | GSI | משתמש | Y | Y | userdebug -> user 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 לניפוי באגים
דיסק ה-RAM לניפוי באגים מסופק על ידי יצרן הציוד המקורי שמריץ את בדיקות התאימות. אין לשחרר את המכשיר ואפשר להשתמש בו רק אם המכשיר לא נעול.
RAMdisk של ניפוי הבאגים לא ייווצר ולא ישמש לשדרוג מכשירים עם:
BOARD_BUILD_SYSTEM_ROOT_IMAGE
נכוןskip_initramfs
בשורת הפקודה של הליבה
Android 12 GSI
אין צורך בהוראה נוספת כדי להשתמש ב-ramdisk של ניפוי באגים עם Android 12 GSI.
החל מ-29 בספטמבר 2021, לא צריך יותר לעדכן את דיסקים זמניים לניפוי באגים באמצעות הכלי repack_bootimg
. גרסת build של Android 12 GSI אחרי 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
, מדיניות האבטחה של המערכת נטענת מהקובץ userdebug_plat_sepolicy.cil
בדיסק ה-RAM לצורכי ניפוי באגים של ה-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.
אריזה מחדש של דיסק RAM לניפוי באגים
במקום לשלב שינויים במדיניות האבטחה כדי ליצור מחדש את boot-debug.img
, השותפים יכולים להשתמש ב-repack_bootimg
כדי לעדכן את קובץ מדיניות האבטחה של GSI ב-boot-debug.img
(או ב-vendor_boot-debug.img
אם המכשיר משתמש ב-GKI).
השלבים הם:
מורידים את
otatools.zip
מ-https://ci.android.com. מומלץ להוריד מהארכיונים של ה-build של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 שבה אתם משתמשים. לדוגמה, אם אתם משתמשים ב-GSI של arm64 מ-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
בהתאם להגדרות המכשיר. להסבר מפורט, עיינו בקטע הבא.
הנתיב של מדיניות האבטחה של 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 Android | Android 11 | 12 Android |
---|---|---|---|
GKI start-with-debug-ramdisk-${KERNEL_VERSION}.img | לא רלוונטי | first_stage_ramdisk/userdebug_plat_sepolicy.cil |
userdebug_plat_sepolicy.cil |
קובץ boot-debug.img ספציפי למכשיר | תלוי ב-force_normal_boot | תלוי ב-Force_regular_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
מ-boot-with-debug-ramdisk-5.4.img
ב-Android 11 אל 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
לא מופיע בשורת הפקודה של הליבה, צריך לשנות את הפקודה כפי שמתואר בהמשך כדי לשנות את נתיב היעד ל-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