Я можу відповісти на це.
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, до складу якої входить Pi.
Надалі такі драйвери, як bcm2835
бібліотека, wiringPi
будуть оновлюватися більше (деякі оновлення вже відбуваються), а додатки, побудовані на основі цих інструментів, будуть оновлюватися далі, а потім у майбутньому, сподіваємось, все це клопотання GPIO як root буде зникають.
До цього часу у вас є два варіанти, відкрийте /dev/mem
групу gpio
як читати / писати, або запустіть як root, який має повне записування читання для всіх /dev/mem
.
Сподіваюся, що це має сенс.
Наразі існує ще багато проблем, з якими вам все одно потрібно працювати root
. Наприклад, використовуючи node-red-contrib-dht-sensor
модуль, який залежить від node-dht-sensor
, що залежить від BCM2835. Це seg-помилки, використовуючи, /dev/gpiomem
оскільки в ньому є деякі помилки або в, node-dht-sensor
або в, /dev/gpiomem
або в тому, як вони працюють разом. Я не знаю, що це за справа, але це з часом буде відпрацьовано. Коли BCM2835 працює як "некореневий" і /dev/gpiomem
існує, він намагається використовувати /dev/gpiomem
замість цього /dev/mem
, тому відкриття /dev/mem
групи gpio
не допомагає. Бампер.