Подтвердить что ты не робот

Доступ к GPIO (из малины pi) без `` sudo``

Этот вопрос может быть не специфичен для малины pi, конечно. Кроме того, я относительно новичок в Linux.

Я хочу написать небольшую библиотеку (в node.js, если это имеет значение) для доступа к GPIO малины pi с использованием sysfs. Однако доступ к sysfs требует доступа sudo, и это плохо по понятным причинам.

Quick2Wire, похоже, имеет решение, но я хочу лучше понять его, а не просто использовать его вслепую. Конечно, они использовали C, но из того, что я понимаю, код не является сложным и, вероятно, может быть снят с помощью bash, даже если он менее изящный. Однако, более того, я не уверен, что почему работает.

Любая помощь будет большой.

Изменить: Спасибо за комментарии. Ясно, что мне нужно перефразировать вопрос. Вот оно: Как это было после установки (как root), приложение не требует больше корневых персов для использования? Как добавить кого-то в группу в этом случае? /sys/devices/virtual/gpio - это не место, где доступны системы gpio sysfs, и что же это за трюк? Я действительно n00b, поэтому эти вопросы могут быть n00b-ish, поэтому, пожалуйста, несите меня.

4b9b3361

Ответ 1

Ракеш, я просто пытался понять точно то же самое, и я думаю, что решил.

Вам не нужно вообще разбираться в make файле. Важными линиями являются следующие, которые выполняются в bash при запуске 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 создает системную группу gpio. chgrp gpio $(DESTDIR)/bin/gpio-admin изменяет группу двоичного файла (который скомпилировал файл C gpio-admin.c) в gpio. Владелец двоичного файла по-прежнему остается root (поскольку вы запускаете make как root.) chmod u=rwxs,g=rx,o= $(DESTDIR)/bin/gpio-admin выполняет две важные вещи. Во-первых, он позволяет члену группы gpio запускать gpio-admin. Во-вторых, он устанавливает бит setuid в gpio-admin.

Когда вы добавляете себя в группу gpio, вы можете запустить gpio-admin без использования sudo, но gpio admin будет действовать так, как будто он выполняется под sudo. Это позволяет записывать файл /sys/class/gpio/export. Он также позволяет изменять владельца файлов /sys/class/gpio/gpio [pin number]/direction и т.д., Которые создаются.

Даже если вы измените группу /sys/class/gpio/export на gpio и установите разрешения, чтобы разрешить вам писать в нее

sudo chgrp gpio /sys/class/gpio/export /sys/class/gpio/unexport
sudo chmod g+rwx /sys/class/gpio/export /sys/class/gpio/unexport

вы можете экспортировать вывод без полномочий суперпользователя.

echo 22 > /sys/class/gpio/export

но файлы /sys/class/gpio/gpio 22/direction и т.д. будут по-прежнему создавать с правами root как владелец и группа, и вам нужно будет использовать sudo для их изменения. Кроме того, право собственности на файлы экспорта и экспорта не возвращается к root после каждой перезагрузки.