मैं इसका जवाब दे सकता हूं।
sudo chown root.gpio /dev/mem
यह मालिक और के समूह में परिवर्तन /dev/mem
करने के लिए root
और gpio
क्रमशः।
sudo chmod g+rw /dev/mem
तब समूह इस /dev/mem
वस्तु को रीड राइट एक्सेस देता है ।
/dev/mem
वस्तु मूल रूप से सिस्टम पर पूरे स्मृति स्थान है। इसका मतलब यह है कि अब समूह gpio
, और उसमें मौजूद हर कोई मेमोरी स्पेस को पढ़ और लिख सकता है।
अब, मेमोरी स्पेस में सीपीयू रजिस्टर सहित कई चीजें हैं। जब आप GPIO पिन को टॉगल करते हैं, तो आप इनमें से एक रजिस्टर में थोड़ा बदलाव कर रहे हैं। किकर है, आपको यह सुनिश्चित करने की आवश्यकता है कि आप इसे सही तरीके से करते हैं या आपके सिस्टम में खराब बुरी चीजें हो सकती हैं।
संपूर्ण मेमोरी स्पेस को सुरक्षित रखने में मदद करने के लिए, जिन शक्तियों को केवल मेमोरी भागों में मैप किया जाता है, जिन्हें हमें GPIO बिट्स के साथ काम करने की आवश्यकता होती है /dev/gpiomem
। यह प्रभाव मास्क / शेष मेमोरी स्पेस को एक्सेस करने से रोकता है और केवल GPIO बिट्स को एक्सेस करने की अनुमति देता है। यह GPIO मेमोरी एड्रेस तक पहुंच की अनुमति देता है और मेमोरी के किसी भी अन्य हिस्से को बंद कर देता है, जैसे कि मेमोरी वर्तमान में किसी अन्य प्रोग्राम द्वारा उपयोग की जा रही है।
वास्तव में, यह GPIO सामान तक पहुँच की अनुमति देने के लिए सुरक्षा और सिस्टम स्थिरता सुरक्षा दोनों में एक छेद को नष्ट कर देता है, साथ ही साथ शेष मेमोरी, लेकिन केवल समूह GPIO में उपयोगकर्ताओं के लिए, जो Pi का एक सदस्य है।
भविष्य में, ड्राइवर जैसे bcm2835
लाइब्रेरी और wiringPi
अधिक अपडेट किए जाएंगे (कुछ अपडेट पहले से ही हो रहे हैं) और उन टूल्स के शीर्ष पर बनाए गए एप्लिकेशन आगे अपडेट हो जाएंगे और फिर भविष्य में, उम्मीद है कि यह सब GPIO परेशानी जड़ के रूप में होगा गायब होना।
तब तक आपके पास दो विकल्प हैं, /dev/mem
समूह gpio
को पढ़ने / लिखने के रूप में खोलें , या रूट के रूप में चलाएं, जिसमें सभी को पूरा पढ़ा लिखा है /dev/mem
।
आशा है कि समझ में आता है।
वर्तमान में अभी भी कुछ ऐसे मुद्दे हैं जहाँ आपको अभी भी चलाने की आवश्यकता है root
। उदाहरण के लिए, node-red-contrib-dht-sensor
मॉड्यूल का उपयोग करना , जो पर निर्भर करता है node-dht-sensor
, जो कि BCM2835 पर निर्भर करता है। यह का उपयोग कर SEG-दोष /dev/gpiomem
के रूप में यह कुछ कीड़े अभी भी है या तो में node-dht-sensor
या में /dev/gpiomem
या जिस तरह से वे एक साथ काम कर रहे हैं। मुझे नहीं पता कि मामला क्या है, लेकिन यह आखिरकार काम कर जाएगा। जब BCM2835 'नॉन-रूट' के रूप में चलता है और /dev/gpiomem
मौजूद होता है, तो /dev/gpiomem
इसके बजाय इसका उपयोग करने की कोशिश करता है /dev/mem
, इसलिए /dev/mem
समूह को खोलने से gpio
मदद नहीं मिलती है। ओह।