Я можу відповісти на це.
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не допомагає. Бампер.