访问没有``sudo``的GPIO(树莓派)

Rak*_*Pai 20 linux sudo gpio raspberry-pi

当然,这个问题可能并不特定于树莓派.另外,我对Linux比较陌生.

我想写一个小库(在node.js中,如果这很重要)来使用sysfs访问raspberry pi的GPIO.但是,访问sysfs需要sudo访问权限,这显然是有原因的.

Quick2Wire似乎有一个解决方案,但我想更好地理解它,而不是盲目地使用它.他们当然使用了C语言,但从我的理解来看,代码并不复杂,而且可能只用bash就可以完成,即使不那么优雅.但是,最重要的是,我不确定它为什么会起作用.

任何帮助都会很棒.

编辑:感谢您的评论.很明显,我需要重新解释这个问题.这里说:一旦安装(作为root),应用程序不再需要使用根权限吗?在这种情况下,如何将某人添加到群组中?/sys/devices/virtual/gpio不是gpio sysfs可用的位置,那有什么诀窍呢?我真的是一个n00b,所以这些问题可能是n00b-ish,所以请耐心等待.

Har*_*ner 20

Rakesh,我刚刚试图找出完全相同的东西,我想我已经解决了它.

你根本不需要了解很多makefile.重要的行如下,在运行时以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
Run Code Online (Sandbox Code Playgroud)

groupadd -f --system gpio创建一个名为gpio的系统组.chgrp gpio $(DESTDIR)/bin/gpio-admin将二进制文件组(C文件gpio-admin.c编译为)更改为gpio.二进制文件的所有者仍然是root(因为你以root身份运行make.)chmod u=rwxs,g=rx,o= $(DESTDIR)/bin/gpio-admin做了两件重要的事情.首先,它让gpio组的成员运行gpio-admin.其次,它在gpio-admin上设置setuid位.

当你自己添加到gpio组时,你可以运行gpio-admin,而不使用sudo,但是gpio admin会像在sudo下运行一样.这允许它写入/ sys/class/gpio/export文件.它还允许它更改创建的文件/ sys/class/gpio/gpio [引脚号] /方向等的所有者.

即使您将/ 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
Run Code Online (Sandbox Code Playgroud)

您可以导出没有超级用户权限的引脚

echo 22 > /sys/class/gpio/export
Run Code Online (Sandbox Code Playgroud)

但仍然会创建文件/ sys/class/gpio/gpio22/direction等作为所有者和组的root,并且您需要使用sudo来更改它们.此外,导出和取消导出文件的所有权将在每次重新启动后恢复为root.