שימוש ב-DebugFS ב-Android 12

מכשירים שמופעלים עם Android 12 באמצעות ליבה גרסאות עדכניות יותר מ-v5.4 נדרשות כדי לשלוח את הליבה של GKI. אז זה לשותפים יש גישה ל-DebugFS בגרסאות build של ניפוי באגים בזמן שהם מפתחים ב-GKI הליבה, הגדרת הליבה CONFIG_DEBUG_FS מופעלת ב-GKI defconfig. אף פעם לא לטעון DebugFS בגרסאות build של משתמשים למכשירים ב-Android 12.

לגרסאות build של ניפוי באגים יש כיסוי בדיקות טוב יותר בהשוואה לגרסאות build של משתמשים, והן מניבות שנבדקו לאורך מחזור הפיתוח. התוכנית הבאה מצמצמת את את ההבדל בין שני סוגי ה-build בנוגע לגישה של DebugFS, וגם מספקת את היתרונות הבאים:

  • מניעת האפשרות ליצירה בטעות של גרסאות build של ניפוי באגים על ידי משתמשים בהתאם ל-DebugFS לפונקציונליות חדשה
  • מוודא שכל פונקציונליות קיימת לא תקינה בגלל היעדר DebugFS כבר בשלבים המוקדמים של מחזור הפיתוח

גישות לניפוי באגים בגרסאות build של ניפוי באגים מסווגות בתור ככה:

  1. אתחולי קובץ של DebugFS במהלך אתחול המכשיר, כמו גישת כתיבה לקובץ ב-DebugFS כדי להפעיל איסוף נתונים של ניפוי באגים.
  2. יצירת דוח על באג: Dumpstate HAL קורא קובצי DebugFS כאשר DumpstateBoard() מופעל על ידי dumpstate. הזה הופך לחלק מדוח איתור הבאגים.
  3. בדיקה ואימות ספציפיים למכשיר.

הטבלה הבאה מתארת איך כל אחת משלוש הקטגוריות האלה נתמך ב-Android 12. שימו לב המעקב רלוונטי רק לגרסאות build של ניפוי באגים, כי לא ניתן לבצע את DebugFS טעונה בגרסאות build של משתמשים.

תרחיש לדוגמה גרסת build של ניפוי באגים ב-Android 12
אתחול חד-פעמי של קובצי DebugFS, במהלך ההפעלה. גישה זו מתרחשת פעם אחת בלבד במהלך זמן ההפעלה. פעולת Dumpstate HAL מבצעת את הפעולה הזו במהלך אתחול HAL. כדי להפעיל את אותה ההגדרה, יטען את DebugFS בגרסאות build של ניפוי באגים לפני האתחול של ה-HAL. האפליקציה Init תתקשר למספר umount() ב-DebugFS כאשר המכשיר השלים את האתחול.
יצירת דוח באגים: קריאות Dumpstate HAL DebugFS קבצים, שהופכים לחלק מדוח איתור הבאגים. הפעולה בוצעה באמצעות קובץ Dumpstate HAL בתוך DumpstateBoard() בהפעלה באמצעות תמונת מצב (DumpstateDevice.cpp). כלי ה-Dumpstate (חלק מ-framework של Android) מוודא שDebugFS נטענים במהלך ההפעלה.
בדיקה ואימות ספציפיים למכשיר שורש ומעטפת של Adb. טעינה של DebugFS ממעטפת adb עם גישה לרמה הבסיסית (root)1.

1כדי לטעון את DebugFS מ-adb shell עם גישה לרמה הבסיסית (root), צריך להשתמש בפקודה הבאה:

adb shell mount -t debugfs debugfs /sys/kernel/debug.

פעולות נדרשות של שותפים

על סמך השינויים האלה במדיניות של השותפים, עליהם להחיל את הכללים הבאים מכשירי Android 12:

  • הגדרת כל אתחולי זמן האתחול של צומתי DebugFS במהלך אתחול HAL של מצב ה-Dumpstate. דוגמה לאופן שבו עושים זאת זמינה במאמר DNM: דוגמה לאתחול זמן אתחול של קובצי DebugFS.
  • אין הרשאה לגישה אל DebugFS במהלך זמן ריצה. המקרים החריגים הבאים חלות:
    • יצירת דוח על באג (מ-Dumpstate HAL)
    • בדיקה ואימות (יש גישה ל-adb root ול-shell - יש לוודא ש-DebugFS נטען קודם)

מפתחים יכולים להגדיר את הנכס הקבוע לניפוי באגים persist.dbg.keep_debugfs_mounted כדי ש-DebugFs תישאר בטעינה הפעלות מחדש ב-Userdebug ובגרסאות build של מעורבות.

בדיקות התאימות של GTS מוודאות שמערכת הקבצים DebugFS לא טעונה בגרסאות build של משתמשים. ההצהרות של neverallow בנוגע ל-Sepolicy מבטיחות שבכל מכשיר בגרסה Android 12 ואילך, אין תהליכים לא מורשים גישה אל DebugFs.