Puedo responder esto.
sudo chown root.gpio /dev/mem
Esto cambia el propietario y el grupo de /dev/mem
a root
y gpio
respectivamente.
sudo chmod g+rw /dev/mem
luego le da al grupo acceso de lectura y escritura a este /dev/mem
objeto.
El /dev/mem
objeto es básicamente todo el espacio de memoria en el sistema. Esto significa que ahora el grupo gpio
, y todos en él, pueden leer y escribir en el espacio de la memoria.
Ahora, en el espacio de la memoria hay muchas cosas, incluidos los registros de la CPU. Cuando alterna los pines GPIO, está cambiando un poco en uno de estos registros. El truco es que debes asegurarte de hacerlo correctamente o de lo contrario pueden sucederle cosas malas a tu sistema.
Para ayudar a proteger todo el espacio de memoria, las potencias que se asignan solo a las partes de memoria en las que necesitamos trabajar con los bits GPIO /dev/gpiomem
. En efecto, esto enmascara / protege el resto del espacio de memoria para que no se acceda y solo permite acceder a los bits GPIO. Esto permite el acceso a las direcciones de memoria GPIO y no permite ninguna otra parte de la memoria, como la memoria utilizada actualmente por otros programas.
En efecto, esto abre un agujero en las protecciones de seguridad y estabilidad del sistema para permitir el acceso a las cosas de GPIO, así como al resto de la memoria, pero solo a los usuarios del grupo GPIO, del que Pi es miembro.
En el futuro, los controladores como la bcm2835
biblioteca y wiringPi
se actualizarán más (algunas actualizaciones ya están ocurriendo) y las aplicaciones que se construyen sobre esas herramientas se actualizarán aún más y luego, en el futuro, con suerte todo este problema de GPIO como root será desaparecer.
Hasta entonces, tiene dos opciones: abrir el /dev/mem
grupo gpio
para leer / escribir, o ejecutar como root, que tiene lectura de escritura completa para todos /dev/mem
.
Espero que tenga sentido.
Actualmente todavía hay algunos problemas en los que aún debe ejecutarse root
. Por ejemplo, usando el node-red-contrib-dht-sensor
módulo, que depende de node-dht-sensor
, que depende de BCM2835. Se seg-falla utilizando /dev/gpiomem
ya que tiene algunos errores, ya sea en node-dht-sensor
o en /dev/gpiomem
la forma en que trabajan juntos. No sé cuál es el caso, pero eventualmente se resolverá. Cuando BCM2835 se ejecuta como 'no root' y /dev/gpiomem
existe, intenta usarlo en /dev/gpiomem
lugar de hacerlo /dev/mem
, por lo que abrir el /dev/mem
grupo gpio
no ayuda. Gorrón.