Я могу ответить на это.
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/memto с 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не помогает. Облом.