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

מכשירים שיושקו עם Android 12 באמצעות גרסאות ליבה גבוהות מ-v5.4 חייבים להימכר עם ליבה של GKI. כדי שהשותפים יוכלו לגשת ל-DebugFS ב-builds של userdebug במהלך הפיתוח בליבה של GKI, הגדרת הליבה CONFIG_DEBUG_FS מופעלת ב-defconfig של GKI. לעולם אל תרכיבו את DebugFS ב-builds של משתמשים במכשירים שיושקו עם Android 12.

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

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

הגישה ל-Debugfs ב-builds של userdebug מסווגת באופן הבא:

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

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

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

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

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

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

השותפים חייבים לבצע את הפעולות הבאות בהתאם לשינויים האלה במכשירי Android 12:

  • כל האיניציאליזציות של צמתים מסוג DebugFS בזמן האתחול מתרחשות במהלך האיניציאליזציה של HAL ב-dumpstate. דוגמה לאופן ביצוע הפעולה הזו מופיעה במאמר DNM: Example for boot time initialization of DebugFS files.
  • לא לאפשר גישה ל-DebugFS במהלך זמן הריצה. יש יוצאים מן הכלל:
    • יצירת דוח על באג (מגיע מ-HAL של dumpstate)
    • בדיקה ואימות (אפשר לגשת אליהם באמצעות adb root ו-shell – חשוב לוודא ש-DebugFS מוצמד קודם)

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

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