Je peux répondre à cela.
sudo chown root.gpio /dev/mem
Cela change le propriétaire et le groupe de /dev/mem
à root
et gpio
respectivement.
sudo chmod g+rw /dev/mem
puis donne au groupe un accès en lecture / écriture à cet /dev/mem
objet.
L' /dev/mem
objet est essentiellement la totalité de l'espace mémoire sur le système. Cela signifie qu’à présent, le groupe gpio
et tous ses membres peuvent lire et écrire dans l’espace mémoire.
Maintenant, dans la mémoire, il y a beaucoup de choses, y compris les registres de la CPU. Lorsque vous basculez les broches GPIO, vous modifiez un bit dans l'un de ces registres. Le kicker est, vous devez être sûr de le faire correctement ou de mauvaises choses peuvent arriver à votre système.
Pour aider à protéger tout l’espace mémoire, les puissances à mapper se limitent aux parties de la mémoire sur lesquelles nous devons travailler avec les bits GPIO /dev/gpiomem
. Cela masque / protège le reste de l’espace mémoire et ne permet qu’un accès aux bits GPIO. Cela permet d'accéder aux adresses de la mémoire GPIO et interdit toute autre partie de la mémoire, telle que la mémoire en cours d'utilisation par d'autres programmes.
En fait, cela bloque les protections de sécurité et de stabilité du système pour permettre l'accès au contenu GPIO, ainsi qu'au reste de la mémoire, mais uniquement aux utilisateurs du groupe GPIO, dont Pi est membre.
À l’avenir, des pilotes tels que la bcm2835
bibliothèque wiringPi
seront mis à jour davantage (certaines mises à jour sont déjà en cours) et les applications construites à partir de ces outils seront mises à jour, puis dans le futur, espérons-le disparaître.
Jusque-là, vous avez deux choix: ouvrir le /dev/mem
groupe to gpio
en lecture / écriture ou exécuter en tant que root, qui dispose d'une écriture complète en lecture /dev/mem
.
J'espère que cela a du sens.
Il y a encore de nombreux problèmes pour lesquels vous devez toujours vous lancer root
. Par exemple, en utilisant le node-red-contrib-dht-sensor
module, qui dépend de node-dht-sensor
, qui dépend de BCM2835. Il commet des fautes /dev/gpiomem
car il y a encore des bugs dans node-dht-sensor
ou dans /dev/gpiomem
la manière dont ils travaillent ensemble. Je ne sais pas quel est le cas, mais ça finira par être réglé. Lorsque le BCM2835 s'exécute en tant que "non-root" et qu'il /dev/gpiomem
existe, il essaie de l'utiliser /dev/gpiomem
au lieu de /dev/mem
, de sorte que l'ouverture du /dev/mem
groupe à gpio
n'aide pas. Bummer.