Android 12 के साथ लॉन्च होने वाले ऐसे डिवाइसों को GKI कर्नेल के साथ शिप करना ज़रूरी है जिनमें v5.4 से ज़्यादा वर्शन का कर्नेल इस्तेमाल किया जा रहा है. GKI कर्नेल पर डेवलप करते समय, पार्टनर userdebug बिल्ड में DebugFS
को ऐक्सेस कर सकें, इसके लिए GKI defconfig में कर्नेल कॉन्फ़िगरेशन CONFIG_DEBUG_FS
चालू किया जाता है.
Android 12 पर लॉन्च होने वाले डिवाइसों के लिए, उपयोगकर्ता के बिल्ड में DebugFS
को कभी माउंट न करें.
Userdebug बिल्ड में, User बिल्ड की तुलना में टेस्ट कवरेज बेहतर होती है. साथ ही, डेवलपमेंट साइकल के दौरान इनका ज़्यादा से ज़्यादा परीक्षण किया जाता है. यहां दिया गया प्लान, DebugFS
ऐक्सेस के हिसाब से, दोनों तरह के बिल्ड के बीच के अंतर को कम करता है. साथ ही, ये फ़ायदे भी देता है:
- इससे, नए फ़ंक्शन के लिए, userdebug बिल्ड को
DebugFS
पर निर्भर होने से रोका जा सकता है - यह पक्का करता है कि DebugFS की कमी की वजह से, किसी भी मौजूदा फ़ंक्शन के काम न करने की जानकारी, डेवलपमेंट साइकल के शुरुआती दौर में ही मिल जाए
userdebug बिल्ड में, Debugfs के ऐक्सेस को इस तरह से बांटा गया है:
- डिवाइस के बूट होने के दौरान
DebugFS
फ़ाइल को शुरू करना. जैसे,DebugFS
में किसी फ़ाइल को लिखने का ऐक्सेस, ताकि डीबग डेटा इकट्ठा करने की सुविधा चालू की जा सके. - गड़बड़ी की रिपोर्ट जनरेट करना: जब
dumpstate
सेDumpstateBoard()
को शुरू किया जाता है, तो dumpstate HALDebugFS
फ़ाइलें पढ़ता है. यह जानकारी, गड़बड़ी की रिपोर्ट का हिस्सा बन जाती है. - डिवाइस के हिसाब से जांच और पुष्टि करना.
इस टेबल में बताया गया है कि Android 12 में इन तीन कैटगरी में से हर एक के लिए, किस तरह की सुविधाएं उपलब्ध हैं. ध्यान दें कि यह तरीका सिर्फ़ userdebug बिल्ड पर लागू होता है, क्योंकि DebugFS
को user बिल्ड में माउंट नहीं किया जा सकता.
इस्तेमाल का उदाहरण | Android 12 का userdebug बिल्ड |
---|---|
डिवाइस चालू होने के दौरान, DebugFS फ़ाइलों को एक बार शुरू करना.
यह ऐक्सेस, बूट के समय सिर्फ़ एक बार होता है.
|
Dumpstate HAL, HAL को शुरू करने के दौरान ऐसा करता है. इसे चालू करने के लिए,
init, HAL के शुरू होने से पहले userdebug बिल्ड में DebugFS को माउंट करता है.
डिवाइस के बूट होने के बाद, Init DebugFS पर umount() को कॉल करता है.
|
बग रिपोर्ट जनरेट करना: dumpstate HAL,
DebugFS फ़ाइलों को पढ़ता है, जो बग रिपोर्ट का हिस्सा बन जाती हैं.
|
dumpstate (DumpstateDevice.cpp) से शुरू होने पर, DumpstateBoard() के अंदर dumpstate HAL से किया जाता है.
Android फ़्रेमवर्क का हिस्सा, dumpstate टूल यह पक्का करता है कि DebugFS
को कॉल करने के दौरान माउंट किया जाए.
|
डिवाइस के हिसाब से जांच और पुष्टि करना | Adb रूट और शेल. DebugFS को adb shell से mount करें. इसके लिए, आपके पास
रूट ऐक्सेस1 होना चाहिए.
|
1adb shell
से DebugFS
को रूट ऐक्सेस के साथ माउंट करने के लिए, इस कमांड का इस्तेमाल करें:
adb shell mount -t debugfs debugfs /sys/kernel/debug
.
पार्टनर के लिए ज़रूरी कार्रवाइयां
Android 12 डिवाइसों में इन बदलावों के आधार पर, पार्टनर को ये काम करने होंगे:
DebugFS
नोड के सभी बूट टाइम को शुरू करने के लिए, dumpstate HAL को शुरू करने के दौरान ऐसा करें. ऐसा करने का उदाहरण देखने के लिए, DNM:DebugFS
फ़ाइलों को बूट टाइम में शुरू करने का उदाहरण देखें.- रनटाइम के दौरान
DebugFS
को ऐक्सेस करने की अनुमति न दें. इन अपवादों पर ये शर्तें लागू होती हैं:- गड़बड़ी की रिपोर्ट जनरेट करना (यह dumpstate HAL से आता है)
- जांच और पुष्टि करना (
adb root
औरshell
से ऐक्सेस किया जा सकता है - पक्का करें कि DebugFS पहले माउंट हो)
डेवलपर, डिबग की ड्यूरेबल प्रॉपर्टी persist.dbg.keep_debugfs_mounted
को सेट कर सकते हैं, ताकि userdebug और eng बिल्ड पर DebugFs
को रीबूट के दौरान माउंट किया जा सके.
जीटीएस के अनुपालन से जुड़ी जांच से यह पक्का होता है कि उपयोगकर्ता के बिल्ड में DebugFS
फ़ाइल सिस्टम को mount न किया गया हो. Sepolicy neverallow
स्टेटमेंट यह पक्का करते हैं कि Android 12 या इसके बाद के वर्शन पर लॉन्च होने वाले डिवाइसों में, बिना अनुमति वाली प्रोसेस को DebugFs
का ऐक्सेस न दिया जाए.