当然,这个问题可能不是树莓派所特有的。另外,我对Linux还比较陌生。
我想编写一个小库(在node.js中,如果有关系的话),以使用sysfs访问树莓派的GPIO。但是,访问sysfs需要sudo访问,这很明显是有原因的。
Quick2Wire似乎有解决方案,但我想更好地理解它,而不仅仅是盲目使用。他们当然使用了C,但是据我了解,代码并不复杂,即使不那么优雅,也可以仅使用bash即可完成。但是,最重要的是,我不确定 为什么 会起作用。
任何帮助都会很棒。
编辑:感谢您的评论。显然,我需要重新表述这个问题。总结:一旦安装(以root用户身份),该应用程序又不需要使用其他root权限了怎么办?在这种情况下,将某人添加到组有什么帮助?/sys/devices/virtual/gpiogpio sysfs所在的位置不是吗,那有什么骗术?我真的是n00b,所以这些问题可能是n00b-ish,所以请耐心等待。
/sys/devices/virtual/gpio
Rakesh,我一直在尝试找出完全相同的问题,并且我想已经解决了。
您根本不需要了解很多makefile。重要的几行如下,在您运行时以bash执行sudo make install
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用户(因为您以root用户身份运行make。)chmod u=rwxs,g=rx,o= $(DESTDIR)/bin/gpio-admin做了两件重要的事情。首先,它使gpio组的成员运行gpio- admin。其次,它在gpio-admin上设置了setuid位。
groupadd -f --system gpio
chgrp gpio $(DESTDIR)/bin/gpio- admin
chmod u=rwxs,g=rx,o= $(DESTDIR)/bin/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 / gpio22 / direction等仍将以root作为所有者和组创建,因此您需要使用sudo进行更改。同样,每次重新启动后,导出和取消导出文件的所有权都将还原为root。