מאז Android 10, תמונת המערכת הגנרית (GSI) שמשמשת להפעלת בדיקות התאימות של CTS-on-GSI/VTS השתנתה מסוג userdebug לסוג user build כדי שיהיה אפשר לחתום על הגרסה. זו בעיה בבדיקות VTS כי כדי להריץ את VTS נדרש adb root
, אבל adb root
לא זמין במכשיר עם גרסת build למשתמש.
דיסק ה-RAM לניפוי באגים (או תמונת האתחול לניפוי באגים) מוצג כדי להפעיל את adb root
במכשיר עם build למשתמש שתוכנת האתחול שלו לא נעולה. השימוש באותו GSI system.img
של בניית משתמשים עבור CTS-on-GSI ו-VTS-on-GSI מפשט את תהליך הבדיקה. כדי להגדיר STS, עדיין צריך להשתמש ב-OEM system.img
אחר של userdebug.
בטבלה הבאה מוצגים שינויים בתמונות ובסוגי הבנייה לבדיקות תאימות ב-Android 10.
חבילת בדיקות | בדיקה באמצעות | תכנות | ניפוי באגים ב-ramdisk | adb root? | Android 9 -> 10 build variant change |
---|---|---|---|---|---|
CTS | המערכת של ה-OEM | משתמש | N | N | ללא שינוי |
CTS-on-GSI | GSI | משתמש | N | N | userdebug -> user GSI הגרסה חתומה |
STS | המערכת של ה-OEM | userdebug | N | 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
עם גרסת המשתמש system.img
(או GSI או OEM).
במכשירים עם מחיצת vendor_boot
שמשתמשים ב-Generic Kernel Image (GKI), אסור להפעיל את boot-debug.img
, כי צריך להפעיל את מחיצת boot
עם תמונת GKI מאושרת.
במקום זאת, צריך להעביר את vendor_boot-debug.img
למחיצה vendor_boot
כדי לאפשר ניפוי באגים ב-ramdisk.
דרישות מוקדמות לשימוש ב-ramdisk לניפוי באגים
ה-ramdisk לניפוי באגים מסופק על ידי יצרן הציוד המקורי (OEM) שמריץ את בדיקות התאימות. הוא לא יכול להיות חתום על ידי גרסת הפצה, ואפשר להשתמש בו רק אם המכשיר לא נעול.
דיסק ה-RAM לניפוי באגים לא ייווצר ולא ישמש לשדרוג מכשירים עם:
BOARD_BUILD_SYSTEM_ROOT_IMAGE
true-
skip_initramfs
בשורת הפקודה של ליבת המערכת
Android 12 GSI
אין צורך בהוראות נוספות כדי להשתמש ב-ramdisk לניפוי באגים עם GSI של Android 12.
החל מ-29 בספטמבר 2021, אין יותר צורך לעדכן את דיסקי ה-RAM לניפוי באגים באמצעות הכלי repack_bootimg
. גרסת ה-GSI של Android 12 אחרי SGR1.210929.001 (7777720)
משלבת את הקובץ userdebug_plat_sepolicy.cil
העדכני ב-system.img
ומתעלמת מ-userdebug_plat_sepolicy.cil
מ-ramdisk של ניפוי הבאגים. פרטים נוספים מופיעים ברשימות השינויים.
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
כדי לבנות מחדש את boot-debug.img
או vendor_boot-debug.img
.
לחלופין, אפשר להשתמש בכלי repack_bootimg
כדי לבנות מחדש את boot-debug.img
או את vendor_boot-debug.img
עם מדיניות GSI sepolicy מעודכנת.
אריזה מחדש של ramdisk לניפוי באגים
במקום לשלב שינויים ב-sepolicy כדי לבנות מחדש את boot-debug.img
, שותפים יכולים להשתמש ב-repack_bootimg
כדי לעדכן את קובץ ה-sepolicy של GSI ל-boot-debug.img
(או ל-vendor_boot-debug.img
אם המכשיר משתמש ב-GKI).
כך עושים זאת:
מורידים את
otatools.zip
מהכתובת https://ci.android.com. מומלץ להוריד מתוך ארטיפקטים של build שלaosp_cf_arm64_only_phone-userdebug
בענףaosp-android-latest-release
.הגדרת סביבת ההפעלה של
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 build שבו אתם משתמשים. לדוגמה, אם אתם משתמשים ב-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 sepolicy
הפקודה repack_bootimg
מעתיקה את הקובץ userdebug_plat_sepolicy.cil
מ-ramdisk של --src_bootimg
אל ramdisk של --dst_bootimg
. עם זאת, יכול להיות שהנתיב ב-ramdisk לניפוי באגים יהיה שונה בגרסאות שונות של Android. ב-Android 10 וב-Android 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.
תמונת ניפוי באגים | Android 10 | Android 11 | 12 Android |
---|---|---|---|
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
הוספת כותרת תחתונה של AVB
אם התמונה שמועברת אל --dst_bootimg
מוגדרת כמחיצה AVB-chained, צריך להוסיף כותרת תחתונה של 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