Android 12 में DebugFS का उपयोग करना

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

यूजरडिबग बिल्ड में यूजर बिल्ड की तुलना में बेहतर परीक्षण कवरेज होता है और पूरे विकास चक्र में इसका भारी परीक्षण किया जाता है। निम्नलिखित योजना DebugFS एक्सेस के संबंध में दो बिल्ड प्रकारों के बीच अंतर को कम करती है, और ये लाभ प्रदान करती है:

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

यूजरडिबग बिल्ड में डिबगफ्स एक्सेस को निम्नानुसार वर्गीकृत किया गया है:

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

निम्न तालिका बताती है कि एंड्रॉइड 12 में इन तीन श्रेणियों में से प्रत्येक को कैसे समर्थित किया गया है। ध्यान दें कि निम्नलिखित केवल यूजरडीबग बिल्ड पर लागू होता है क्योंकि DebugFS यूजर बिल्ड में माउंट नहीं किया जा सकता है।

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

1 रूट एक्सेस के साथ adb shell से DebugFS माउंट करने के लिए, इस कमांड का उपयोग करें:

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

आवश्यक भागीदार क्रियाएँ

Android 12 उपकरणों में इन परिवर्तनों के आधार पर भागीदारों को निम्नलिखित कार्य करना होगा:

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

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

जीटीएस अनुपालन परीक्षण यह सुनिश्चित करते हैं कि DebugFS फ़ाइल सिस्टम उपयोगकर्ता बिल्ड में माउंट नहीं किया गया है। सेपॉलिसी neverallow स्टेटमेंट यह सुनिश्चित करते हैं कि एंड्रॉइड 12 या उच्चतर पर लॉन्च होने वाले उपकरणों में, अनधिकृत प्रक्रियाओं को DebugFs तक पहुंच प्रदान नहीं की जाती है।