20

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

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

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

任何帮助都会很棒。

编辑:感谢您的评论。很明显,我需要重新表述这个问题。这里有:一旦安装(作为root),应用程序不需要任何更多的root权限才能使用?在这种情况下,将某人添加到组有什么帮助?/sys/devices/virtual/gpio不是gpio sysfs可用的位置,那有什么诡计?我真的是一个n00b,所以这些问题可能是n00b-ish,所以请多多包涵。

4

1 回答 1

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

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

您可以在没有超级用户权限的情况下导出 pin

echo 22 > /sys/class/gpio/export

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

于 2012-09-13T17:02:53.763 回答