Buna cevap verebilirim.
sudo chown root.gpio /dev/mem
Bu kullanıcı ve grup değiştirir /dev/mem
için root
ve gpio
sırasıyla.
sudo chmod g+rw /dev/mem
daha sonra gruba bu /dev/mem
nesneye okuma yazma izni verir .
/dev/mem
Nesne temelde sistemde tüm hafıza alanıdır. Bu, artık grubun gpio
ve içindeki herkesin bellek alanını okuyabildiği ve yazabildiği anlamına gelir .
Şimdi, bellek alanında CPU kayıtları da dahil olmak üzere birçok şey var. GPIO pinlerini değiştirdiğinizde, bu kayıtlardan birinde biraz değişiyorsunuz. Kicker, doğru yaptığınızdan emin olmanız gerekir, aksi takdirde sisteminizde kötü şeyler olabilir.
Tüm hafıza alanını korumaya yardımcı olmak için, sadece GPIO ile çalışmamız gereken hafıza parçalarının eşlendiği güçler /dev/gpiomem
. Bu aslında hafıza alanının geri kalanını erişime karşı korur / korur ve sadece GPIO bitlerine erişime izin verir. Bu, GPIO belleğine erişime izin verir ve şu anda başka programlar tarafından kullanılmakta olan bellek gibi, belleğin diğer bölümlerine izin vermez.
Aslında bu, GPIO öğelerine ve ayrıca belleğin geri kalan kısmına erişime izin vermek için hem güvenlik hem de sistem kararlılığı korumalarında bir delik açar, ancak yalnızca Pi'nin üyesi olduğu GPIO grubundaki kullanıcılar için.
Gelecekte, bcm2835
kütüphane gibi sürücüler wiringPi
daha fazla güncellenecek (bazı güncellemeler zaten oluyor) ve bu araçların üzerine inşa edilmiş olan uygulamalar daha da güncellenecek ve daha sonra gelecekte, bu GPIO sorununu kök olacaktır kaybolmak.
O zamana kadar iki seçeneğiniz olacak, /dev/mem
gruba gpio
okuma / yazma olarak açın veya hepsine tam okuma yazma olan bir root olarak çalıştırın /dev/mem
.
Umarım anlamlı olur.
Halen, hala koşmanız gereken bazı konular var root
. Örneğin, node-red-contrib-dht-sensor
bağlı node-dht-sensor
olan, BCM2835'e bağlı olan modülün kullanılması. Bu kullanarak-hatalarını seg /dev/gpiomem
ya hala bazı hatalar olduğu gibi node-dht-sensor
veya /dev/gpiomem
veya yolu birlikte çalışıyoruz. Hangisi olduğunu bilmiyorum, ama sonunda işe yarayacak. BCM2835 'root olmayan' /dev/gpiomem
olarak çalıştığında ve mevcut olduğunda, /dev/gpiomem
yerine onu kullanmaya çalışır /dev/mem
, böylece /dev/mem
grubun açılması gpio
yardımcı olmaz. Aylak.