कर्नेल मॉड्यूल मेमोरी एक्सेस


9

क्या दो अलग-अलग कर्नेल मॉड्यूल कॉल से ioremap_nocache () तक मेमोरी के एक ही क्षेत्र तक पहुंच प्राप्त कर सकते हैं?

मेरे पास एक वायरलेस ड्राइवर है, और एक अलग मॉड्यूल है, मैं कार्ड पर शोर मूल्यों को प्रोफाइल करने के लिए अलग मॉड्यूल चाहूंगा, जबकि चालक अभी भी काम कर रहा है। इसलिए मेरा सवाल ऊपर।

मेरे द्वारा खोजा गया एक एवेन्यू ड्राइवर से कर्नेल थ्रेड शुरू करने के लिए था, मैंने तब एक समरूपता को लागू किया जो समवर्ती रीड / राइट्स से उत्पन्न होने वाली किसी भी रेस की स्थिति को एक ही एड्रेस स्पेस पर रोकने के लिए लागू किया गया। मुझे उम्मीद थी कि एक बच्चा थ्रेड स्मृति के एक ही क्षेत्र तक पहुंचने में सक्षम होगा।

दुर्भाग्य से यह काम नहीं किया है जैसा कि मुझे उम्मीद थी। हम किसी भी सुझाव की सराहना करेंगे।


शोर मूल्यों को प्रोफाइल करने के लिए आपको कर्नेल मॉड्यूल की आवश्यकता क्यों होगी?
gertvdijk

इस सवाल के लिए धन्यवाद, वायरलेस ड्राइवर बहुत जटिल है, और इसकी आवधिकता को बदलने के लिए अंशांकन कुछ अनपेक्षित परिणाम उत्पन्न कर सकते हैं। मुझे ऐसा करना होगा क्योंकि यह केवल अंतराल के लिए अपने अंशांकन करता है जो मेरी जरूरतों के लिए बहुत लंबे हैं। चूंकि मुझे पता है कि डिवाइस को एक अलग मॉड्यूल में कैसे प्रोफाइल करना है, इसलिए मैं यह जानने के लिए उत्सुक हूं कि क्या मैं मेमोरी के उसी क्षेत्र तक पहुंच प्राप्त कर सकता हूं जो ड्राइवर के साथ काम कर रहा है।
राधागस्प २asp

2
कृपया अपने पिछले प्रयासों / दृष्टिकोणों के सभी विवरणों को शामिल करने के लिए अपने प्रश्न को संपादित करें। कि यह साइट कैसे काम करती है। यह एक चर्चा मंच नहीं है, लेकिन एक प्रश्नोत्तर साइट है, जिसे आप देखते हैं?
gertvdijk

चर्चा में प्रश्न, और उत्तर, कुछ सही और अन्य गलत शामिल हो सकते हैं - ऐसा लगता है कि प्रवेश के दौरान नियमों की व्याख्या, शब्दार्थ के क्षेत्र में है। मुझे अपना प्रश्न निश्चित रूप से अपडेट करना होगा।
राडगस्प डे

जवाबों:


7

मुझे लगता है कि आप एक और कर्नेल मॉड्यूल को लागू करने का इरादा रखते हैं क्योंकि आपको लगता है कि कर्नेल मॉड्यूल के बीच डेटा साझा करना आसान है। लेकिन शायद यह एक अच्छा विकल्प नहीं है। यदि उपयोगकर्ता स्थान में 'शोर को प्रोफाइल' करना संभव है, तो मुझे लगता है कि उपयोगकर्ता अंतरिक्ष में 'प्रोफाइलर' को लागू करने के लिए एक बेहतर समाधान है।

इस समाधान में, उपयोगकर्ता अंतरिक्ष प्रोफाइल डेटा पढ़ता है, कुछ गणना करता है, और परिणाम प्रस्तुत करने से।

यदि यह समाधान ठीक है, तो कार्यान्वयन निम्नानुसार है।

कर्नेल मॉड्यूल में, यह केवल एक उपकरण को '/ proc' में पंजीकृत करना और 'रीड' और 'लिखना' आदिम लागू करना है। उपयोगकर्ता अंतरिक्ष में, केवल प्रोफाइलर को पढ़ने, लिखने और चार डिवाइस को लागू करने के लिए है। इस कार्यान्वयन के लिए विवरण और जानकारी यहाँ सभी है


मुझे नहीं लगता कि मुझे आपका जवाब मिल रहा है ... जैसा कि मैं समझता हूं, मुझे अभी भी एक मॉड्यूल लिखने की आवश्यकता होगी, और यह मॉड्यूल एक कॉल से ioremap_nocache () तक मेमोरी के उसी क्षेत्र तक पहुंच प्राप्त करने की कोशिश करेगा मॉड्यूल का उपयोग कर रहा है। या आप कह रहे हैं कि मैं वायरलेस मॉड्यूल में चार डिवाइस को पंजीकृत करता हूं
राडगास्प

1
सही, आपको एक सॉफ्टवेयर लागू करना होगा, लेकिन मॉड्यूल नहीं। आपको एक सामान्य उपयोगकर्ता अंतरिक्ष कार्यक्रम लिखना होगा, जो एक मॉड्यूल की तुलना में सरल है, जो '/ dev / nameofdevice' से पढ़ता है और इसे लिखता है। 'Ioremap_nocache ()', 'syscalls' 'open', 'read', 'write', 'close' के रूप में उपयोग करने की आवश्यकता नहीं है। और हां, वायरलेस मॉड्यूल को उपयोगकर्ता के डेटा को उजागर करने के लिए चार डिवाइस '/ dev / nameofdevice' के अंदर रजिस्टर करना होगा।
vitorafsr
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.