क्या चल रहे कर्नेल के / sys का उपयोग करके डिवाइस ट्री के लिए जानकारी प्राप्त करना संभव है?


20

आमतौर पर आर्म सिस्टम के लिए, डिवाइस ट्री कर्नेल (लिनक्स) को हार्डवेयर जानकारी प्रदान करते हैं। ये डिवाइस ट्री dts (डिवाइस ट्री सोर्स) फ़ाइलों के रूप में मौजूद हैं, जिन्हें संकलित और कर्नेल में लोड किया गया है। समस्या यह है कि मेरे पास ऐसी dtsफ़ाइल तक पहुंच नहीं है , यहां तक ​​कि dtbफ़ाइल तक नहीं ।

मेरे पास मशीन पर /sysऔर तक पहुंच है और /procमैं पूछना चाहता था कि क्या मुझे "सही मानों" का अनुमान लगाने की अनुमति मिलेगी?

इसके अलावा संभावित उत्तर इसके अतिरिक्त पहलू को उजागर कर सकते हैं यदि इस प्रश्न का उत्तर इस बात पर भी निर्भर करता है कि क्या डिवाइस ट्री इंटरफ़ेस का उपयोग पहली जगह में किया गया था (यानी dtbबनाया गया था और कर्नेल को प्रदान किया गया था) कुछ और हैकिंग के बजाय "हम बस वेनिला से डायवर्ट करते हैं" और कर्नेल को पैच करें ताकि हमारे कर्नेल के लिए डिवाइस सूचना समस्या को हल किया जा सके?


क्या आपके पास बूट छवि तक पहुँच है? आप डिवाइस ट्री को वहां से निकाल सकते हैं। मैं मदद कर सकता हूँ।
phk

जवाबों:


27

/proc/device-tree या /sys/firmware/devicetree/base

मुझे लगता है कि दोनों ही उपनाम हैं, /sys/firmware/devicetree/baseसंभावना है कि taming के बाद बेहतर विकल्प होगा /proc

तब आप फ़ाइलों से dts गुणों तक पहुँच सकते हैं:

 hexdump /sys/firmware/devicetree/base/apb-pclk/clock-frequency

पूर्णांक के लिए आउटपुट स्वरूप बाइनरी है, इसलिए hexdumpइसकी आवश्यकता है।

dtc -I fs

फाइलसिस्टम से एक पूर्ण डिवाइस ट्री प्राप्त करें:

sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base

स्टडआउट के लिए dts आउटपुट।

इसे भी देखें: कर्नेल डिवाइस ट्री को कैसे सूचीबद्ध करें | यूनिक्स और लिनक्स स्टैक एक्सचेंज

dtc बिल्डरोट में

बिल्डरोट में रूट फाइल सिस्टम के अंदर BR2_PACKAGE_DTC=yडालने के लिए एक कॉन्फिगरेशन होता है dtc

QEMU -machine dumpdtb

यदि आप QEMU के अंदर Linux चला रहे हैं, तो QEMU स्वचालित रूप से DTBs उत्पन्न करता है यदि आप इसे स्पष्ट रूप से नहीं देते हैं -dtb, और इसलिए यह सीधे इसके साथ डंप करने में भी सक्षम है:

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine dumpdtb=dtb.dtb

जैसा कि यहां बताया गया है: https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.html

लिनक्स कर्नेल v4.19 arm64 पर इस QEMU + बिल्डरोट सेटअप के साथ परीक्षण किया गया।


4

मुझे यकीन नहीं है कि अगर मैं आपको सही तरीके से समझता हूं।

यदि आप एक ऐसे सिस्टम पर हैं, जो dtb का उपयोग करके बूट किया जाता है, तो आपका डिवाइस ट्री डीबगफ़ के अंदर उपलब्ध होना चाहिए।

आप Pantelis Antoniou द्वारा dtc टूल भी आज़मा सकते हैं, इनमें fdtdump और fdtget शामिल हैं जो एक बूँद से प्रिंट प्रिंट करता है।

यदि आपके पास एक उपकरण का पेड़ नहीं है और आपने dtb से बूट नहीं किया है, तो आपको स्वयं मशीन कोड से गुजरना होगा और सभी डिवाइस विशिष्ट विशेषताओं और नोड्स को अपने dts में जोड़ना होगा। इस तरह के बूट के लिए कोई "सिंथेटिक" डिवाइस ट्री उत्पन्न नहीं होता है। एक शुरुआती बिंदु एक समान मशीन या माता-पिता होगा और फिर सिस्टम द्वारा अपना रास्ता काम करेगा।


धन्यवाद, स्पष्ट करने के लिए। इस बात की संभावना है कि है dtbdebugfs के माध्यम से के माध्यम से सुलभ हो सकता है अभी तक कि पर भरोसा होता है CONFIG_DEBUG_FSमें .configऔर यहां तक कि सेट अभी भी मात्र इच्छा पर है कि वे वास्तव में एक प्रयोग किया जाता है, तो dtbसाथ शुरू करने के लिए, मैं यह सही पढ़ा करते हैं? तो कुछ "बुरे भाग्य" के साथ, उन्होंने न तो डिवाइस ट्री इंटरफेस के प्रत्यक्ष कर्नेल पैचिंग के कुछ प्रकार का इस्तेमाल किया, यह भी सही है? तो इसका मतलब यह होगा कि अंतिम उपाय वूल मशीन कोड होगा, क्योंकि वे GPLv2 का उल्लंघन करते हैं और कर्नेल को बंद कर देते हैं, है ना?
मानवतावादी

पहले दो के लिए हाँ और हाँ। अंतिम, IANAL, लेकिन मशीन आर्क / ??? / mach - ??? / बोर्ड - ???। C में पुराने कर्नेल में एक मशीन के लिए मौजूद विशेष उपकरण शामिल होंगे। इसे GPL द्वारा कवर किया जाना चाहिए और शुल्क के लिए उपलब्ध होना चाहिए। अलग-अलग डिवाइस ड्राइवर बंद स्रोत हो सकते हैं, कोई उल्लंघन नहीं।
14
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.