小编典典

在没有``sudo''的情况下访问(树莓派的)GPIO

linux

当然,这个问题可能不是树莓派所特有的。另外,我对Linux还比较陌生。

我想编写一个小库(在node.js中,如果有关系的话),以使用sysfs访问树莓派的GPIO。但是,访问sysfs需要sudo访问,这很明显是有原因的。

Quick2Wire似乎有解决方案,但我想更好地理解它,而不仅仅是盲目使用。他们当然使用了C,但是据我了解,代码并不复杂,即使不那么优雅,也可以仅使用bash即可完成。但是,最重要的是,我不确定
为什么 会起作用。

任何帮助都会很棒。

编辑:感谢您的评论。显然,我需要重新表述这个问题。总结:一旦安装(以root用户身份),该应用程序又不需要使用其他root权限了怎么办?在这种情况下,将某人添加到组有什么帮助?/sys/devices/virtual/gpiogpio
sysfs所在的位置不是吗,那有什么骗术?我真的是n00b,所以这些问题可能是n00b-ish,所以请耐心等待。


阅读 578

收藏
2020-06-07

共1个答案

小编典典

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

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 [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。

2020-06-07