Android 12 में DebugFS इस्तेमाल करना

कर्नेल का इस्तेमाल करके, Android 12 के साथ लॉन्च होने वाले डिवाइस GKI कर्नेल के साथ शिप करने के लिए, v5.4 से बाद के वर्शन की ज़रूरत होती है. ताकि पार्टनर, जीकेआई पर डेवलप करने के दौरान, यूज़रडीबग बिल्ड में DebugFS को ऐक्सेस कर सकते हैं कर्नेल के लिए, GKI defconfig में कर्नेल कॉन्फ़िगरेशन CONFIG_DEBUG_FS सक्षम है. डिवाइसों के लिए, उपयोगकर्ता के बिल्ड में DebugFS को कभी माउंट न करें Android 12 पर लॉन्च किया जाएगा.

उपयोगकर्ता बिल्ड के मुकाबले यूज़रडीबग बिल्ड में बेहतर टेस्ट कवरेज होता है. साथ ही, टेस्टिंग के दौरान पूरी तरह से टेस्ट किया जाता है. नीचे दिया गया प्लान, DebugFS के ऐक्सेस के मामले में, दो बिल्ड टाइप के बीच का अंतर और इनसे ये फ़ायदे मिलते हैं:

  • यह DebugFS के आधार पर, यूज़रडीबग बिल्ड को गलती से रोकता है नए फ़ंक्शन के लिए
  • यह पक्का करता है कि DebugFS की कमी की वजह से काम करने वाले मौजूदा फ़ंक्शन में कोई गड़बड़ी हुई हो उसे डेवलपमेंट साइकल की शुरुआत में पता चल जाता है

Userdebug बिल्ड में DebugView के ऐक्सेस को इस कैटगरी में रखा जाता है अनुसरण करता है:

  1. डिवाइस बूट होने के दौरान DebugFS फ़ाइल शुरू होना, जैसे डीबग डेटा कलेक्शन को चालू करने के लिए, DebugFS में किसी फ़ाइल में लिखने का ऐक्सेस.
  2. गड़बड़ी की रिपोर्ट जनरेट होना: डंपस्टेट एचएएल, DebugFS फ़ाइलों को तब पढ़ता है, जब dumpstate ने DumpstateBoard() को शुरू किया है. यह जानकारी, गड़बड़ी की रिपोर्ट का हिस्सा बन जाती है.
  3. अलग-अलग डिवाइस के हिसाब से जांच और पुष्टि करना.

नीचे दी गई टेबल में बताया गया है कि ये तीनों कैटगरी कैसी हैं Android 12 में काम करता है. ध्यान दें कि निम्न केवल उपयोगकर्ता डीबग बिल्ड पर लागू होता है, क्योंकि DebugFS उपयोगकर्ता बिल्ड में माउंट किए जाते हैं.

इस्तेमाल का उदाहरण Android 12 के लिए उपयोगकर्ता डीबग बिल्ड
स्टार्ट होने के दौरान, एक बार DebugFS फ़ाइलों को शुरू करना. यह ऐक्सेस, बूट के दौरान सिर्फ़ एक बार मिलता है. डंपस्टेट HAL यह काम एचएएल शुरू करने के दौरान करता है. इसे चालू करने के लिए, एचएएल के शुरू होने से पहले, userडीबग बिल्ड में init DebugFS को माउंट करता है. Init, DebugFS पर umount() को कॉल करता है, जब डिवाइस को चालू किया जा चुका है.
गड़बड़ी की रिपोर्ट जनरेट करना: डंपस्टेट एचएएल ने पढ़ा DebugFS फ़ाइलें, जो गड़बड़ी की रिपोर्ट का हिस्सा बन जाती हैं. डंपस्टेट से शुरू किए जाने पर DumpstateBoard() में डंपस्टेट एचएएल के ज़रिए किया गया (DumpstateDevice.cpp). डंपस्टेट टूल (Android फ़्रेमवर्क का हिस्सा) यह पक्का करता है कि DebugFS माउंट शामिल होने चाहिए.
अलग-अलग डिवाइस के हिसाब से जांच और पुष्टि करना Adb रूट और शेल. DebugFS को adb शेल से माउंट करें रूट ऐक्सेस1.

1adb shell से DebugFS को माउंट करने के लिए रूट ऐक्सेस करने के लिए, इस निर्देश का इस्तेमाल करें:

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

पार्टनर की ज़रूरी कार्रवाइयां

इन बदलावों के आधार पर, पार्टनर को ये शर्तें लागू करनी होंगी: Android 12 वाले डिवाइस:

  • DebugFS नोड के बूट टाइम के सभी शुरू होने की प्रक्रिया को पूरा करें डंपस्टेट एचएएल शुरू करने के दौरान. इसे कैसे करना है, इसके उदाहरण के लिए, देखें डीएनएम: DebugFS फ़ाइलों को बूट करने के समय को शुरू करने के तरीके का उदाहरण.
  • रनटाइम के दौरान, DebugFS को ऐक्सेस करने की अनुमति न दें. नीचे दिए गए अपवाद लागू करें:
    • गड़बड़ी की रिपोर्ट जनरेट होना (यह डंपस्टेट एचएएल से आता है)
    • जांच और पुष्टि करना (adb root और shell इसे ऐक्सेस कर सकते हैं - पक्का करें कि DebugFS पहले माउंट किया गया हो)

डेवलपर, डीबग के लिए परसिस्टेंट प्रॉपर्टी को सेट कर सकते हैं DebugFs को माउंट रखने के लिए persist.dbg.keep_debugfs_mounted उपयोगकर्ता डीबग और इंजीनियरिंग बिल्ड पर रीबूट करता है.

GTS के अनुपालन जांच से पक्का होता है कि DebugFS फ़ाइलसिस्टम उपयोगकर्ता बिल्ड में माउंट किए जाते हैं. Sepolicy neverallow स्टेटमेंट से यह पक्का होता है कि डिवाइसों में Android 12 या उसके बाद के वर्शन पर लॉन्च किया जा रहा हो, तो बिना मंज़ूरी वाली प्रोसेस की अनुमति नहीं दी जाती DebugFs का ऐक्सेस.