Ich kann das beantworten.
sudo chown root.gpio /dev/mem
Dadurch ändert sich die Eigentümer und die Gruppe /dev/mem
zu root
und gpio
sind.
sudo chmod g+rw /dev/mem
Anschließend erhält die Gruppe Lese- und Schreibzugriff auf dieses /dev/mem
Objekt.
Das /dev/mem
Objekt ist im Grunde der gesamte Speicherplatz auf dem System. Dies bedeutet, dass jetzt die Gruppe gpio
und jeder in ihr den Speicherplatz lesen und beschreiben kann.
Im Speicherbereich befinden sich nun viele Dinge, einschließlich der CPU-Register. Wenn Sie die GPIO-Pins umschalten, ändern Sie ein wenig in einem dieser Register. Der Kicker ist, Sie müssen sicher sein, dass Sie es richtig machen, oder es können schlimme schlimme Dinge mit Ihrem System passieren.
Um den gesamten Speicherplatz zu schützen, werden die zuzuordnenden Kräfte nur den Speicherteilen zugeordnet, an denen wir mit den GPIO-Bits arbeiten müssen /dev/gpiomem
. Dies maskiert / schützt den restlichen Speicherplatz vor dem Zugriff und ermöglicht nur den Zugriff auf die GPIO-Bits. Dies ermöglicht den Zugriff auf die GPIO-Speicheradressen und sperrt alle anderen Teile des Speichers, z. B. den Speicher, der derzeit von anderen Programmen verwendet wird.
Tatsächlich ist dies eine Lücke in den Sicherheits- und Systemstabilitätsschutz, um den Zugriff auf die GPIO-Inhalte sowie den Rest des Speichers zu ermöglichen, jedoch nur für die Benutzer in der Gruppe GPIO, bei der Pi Mitglied ist.
In Zukunft werden Treiber wie die bcm2835
Bibliothek und wiringPi
mehr aktualisiert (einige Aktualisierungen finden bereits statt) und die Apps, die auf diesen Tools basieren, werden weiter aktualisiert, und in Zukunft wird hoffentlich all dieser GPIO-Aufwand als Root auftreten verschwinden.
Bis dahin haben Sie zwei Möglichkeiten: Öffnen Sie die /dev/mem
Gruppe "to" gpio
als "read / write" oder führen Sie sie als "root" aus, bei der "read write" für alle ausgeführt wird /dev/mem
.
Hoffe das macht Sinn.
Derzeit gibt es noch viele Probleme, unter denen Sie noch ausgeführt werden müssen root
. Zum Beispiel mit dem node-red-contrib-dht-sensor
Modul, das von dem abhängt node-dht-sensor
, das von BCM2835 abhängt. Es kann Fehler verursachen, /dev/gpiomem
da es noch einige Fehler in node-dht-sensor
oder in /dev/gpiomem
der Art und Weise hat, wie sie zusammenarbeiten. Ich weiß nicht, was der Fall ist, aber irgendwann wird es klappen. Wenn BCM2835 als "Nicht-Root" ausgeführt wird und/dev/gpiomem
vorhanden ist, wird dies /dev/gpiomem
anstelle von verwendet /dev/mem
. Das Öffnen der /dev/mem
Gruppe "Zu" gpio
hilft also nicht. Schade.