Dostęp do GPIO (z Raspberry pi) bez`sudo"

To pytanie może nie być specyficzne dla raspberry pi, oczywiście. Ponadto jestem stosunkowo nowy w Linuksie.

Chcę napisać małą bibliotekę (w node.js, jeśli to ma znaczenie), aby uzyskać dostęp do GPIO z raspberry pi za pomocą sysfs. Jednak dostęp do systemu sysfs wymaga dostępu sudo, co jest złe z oczywistych powodów.

Quick2Wire wydaje się mieć rozwiązanie, ale chcę je lepiej zrozumieć, a nie tylko ślepo z niego korzystać. Oczywiście używali C, ale z tego co ja zrozum, kod nie jest skomplikowany i prawdopodobnie można go ściągnąć za pomocą Basha, nawet jeśli jest mniej elegancki. Jednak, bardziej niż cokolwiek innego, nie jestem pewien dlaczego to działa.

Każda pomoc będzie świetna.

Edit: dzięki za komentarze. To jasne, że muszę zmienić zdanie. Here goes: Jak to jest, że po zainstalowaniu (jako root), aplikacja nie wymaga więcej stałych root używać? W jaki sposób dodanie kogoś do grupy pomaga w tym przypadku? /sys/devices/virtual/gpio to nie jest miejsce gdzie GPIO sysfs jest dostępny, więc o co w tym chodzi? Naprawdę jestem n00b, więc te pytania mogą być n00b-owskie, więc proszę o cierpliwość.

Author: Rakesh Pai, 2012-08-27

1 answers

Rakesh, próbowałem dowiedzieć się dokładnie tego samego i myślę, że to rozwiązałem.

Nie musisz w ogóle rozumieć zbyt wielu plików makefile. Ważne linie są następujące, które są wykonywane w bash po uruchomieniu sudo make install

install: install-files
    groupadd -f --system gpio
    chgrp gpio $(DESTDIR)/bin/gpio-admin
    chmod u=rwxs,g=rx,o= $(DESTDIR)/bin/gpio-admin

groupadd -f --system gpio tworzy grupę systemową o nazwie gpio. chgrp gpio $(DESTDIR)/bin/gpio-admin zmienia grupę binarnych (które plik C GPIO-admin.C został skompilowany do) do gpio. Właścicielem pliku binarnego jest nadal root (ponieważ używasz make jako root.) chmod u=rwxs,g=rx,o= $(DESTDIR)/bin/gpio-admin robi dwie ważne rzeczy. Po pierwsze, pozwala członkowi grupy GPIO uruchomić gpio-admin. Po drugie, ustawia bit setuid na gpio-admin.

Po dodaniu się do grupy gpio, można uruchomić GPIO-admin, bez użycia sudo, ale GPIO admin będzie działać jak jest uruchamiany pod sudo. Pozwala to na zapis do pliku / sys / class/gpio / export. Pozwala również zmienić właściciela plików / sys / class/gpio / gpio[numer pin] / direction itp. to się tworzy.

Nawet jeśli zmienisz Grupa / sys / class/gpio / export do gpio, i ustawić uprawnienia, aby umożliwić pisanie do niego

sudo chgrp gpio /sys/class/gpio/export /sys/class/gpio/unexport
sudo chmod g+rwx /sys/class/gpio/export /sys/class/gpio/unexport
Możesz wyeksportować pin bez uprawnień superużytkownika]}
echo 22 > /sys/class/gpio/export

Ale pliki / sys / class/gpio/gpio22 / direction itp. nadal będzie create z rootem jako właścicielem i grupą, i będziesz musiał użyć sudo, aby je zmienić. Ponadto, własność plików export i unexport powróci do roota po każdym ponownym uruchomieniu.

 20
Author: Harry Braviner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-23 20:29:53