मैंने एक लिनक्स ड्राइवर लिखा है कि ioremaps एक विशेष डिवाइस के लिए पीसीआई बीएआर 0 को एक sysfs बाइनरी विशेषता के लिए निर्यात करता है जो उपयोगकर्ताओं को सीधे इसे नियंत्रित करने की इजाजत देता है।एमएमएपी को कैशिंग मूल्यों से कैसे रोक देगा?
समस्या तब होती है जब मैं सीधे उस बिट मेमोरी (उपयोगकर्तालैंड प्रोग्राम से) तक पहुंचने के लिए विशेषता के शीर्ष पर एमएमएपी का प्रयास करता हूं। पढ़ना ठीक है और अपेक्षित मूल्यों को वापस लौटाता है, हालांकि जब मैं उस स्मृति को लिखता हूं तो यह कर्नेल और मेमोरी के बीच कहीं कैश किया जाता है और जीएमसीएच रूट कॉम्प्लेक्स (और इसलिए डिवाइस) को वितरित नहीं किया जाता है। मैं क्या करना चाहता हूं प्रत्येक पहुंच के बाद एक अंतर्निहित लेखन स्मृति बाधा है।
- क्या कर्नेल को कैशिंग से स्मृति को एमएमएपी-एड बिट में लिखने से रोकने का कोई तरीका है?
का पालन करें अप:
- msync() हर के बाद बुला तक पहुंच तरीका यह है "स्वीकार किए जाते हैं"?
फॉलो-अप का उत्तर देने के लिए ... आपको यहां msync() 'की आवश्यकता नहीं है क्योंकि mmap का बैकिंग करने वाली कोई फ़ाइल नहीं है। हालांकि आपको कुछ चीजों के लिए कुछ आर्किटेक्चर विशिष्ट निर्देशों की आवश्यकता हो सकती है ... उदाहरण के लिए Powerpc पर हार्डवेयर एक्सेस के सही क्रम को सुनिश्चित करने के लिए आपको [eieio] (https://www-01.ibm.com/support/knowledgecenter) की आवश्यकता हो सकती है /ssw_aix_61/com.ibm.aix.alangref/idalangref_eieio_instrs.htm) निर्देश (किसी को हास्य की भावना है :-) ... एक ही टिप्पणी की गई [यहां] (https://unix.stackexchange.com/questions/237783/ तक पहुँचने-स्मृति-मैप किया-कब-है-धीमी गति से)। –