Я могу ответить на это.
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, членом которой является Пи.
В будущем драйверы, такие как bcm2835
библиотека, wiringPi
будут обновляться чаще (некоторые обновления уже происходят), а приложения, построенные на основе этих инструментов, будут обновляться, а затем в будущем, будем надеяться, что все эти проблемы GPIO будут выполняться как root. исчезают.
До тех пор у вас есть два варианта: открыть группу /dev/mem
to с gpio
правами чтения / записи или запустить с правами суперпользователя, которая имеет полное чтение и запись для всех /dev/mem
.
Надеюсь, что это имеет смысл.
В настоящее время все еще есть много проблем, по которым вам все еще нужно работать как root
. Например, используя node-red-contrib-dht-sensor
модуль, который зависит от того node-dht-sensor
, который зависит от BCM2835. Он обнаруживает неисправности, используя /dev/gpiomem
некоторые ошибки, как внутри, так node-dht-sensor
и внутри, /dev/gpiomem
или способ, которым они работают вместе. Я не знаю, в чем дело, но со временем все получится. Когда BCM2835 работает как «не-root» и /dev/gpiomem
существует, он пытается использовать /dev/gpiomem
вместо /dev/mem
, поэтому открытие /dev/mem
группы gpio
не помогает. Облом.