访问没有``sudo``的GPIO(覆盆子pi)

时间:2012-08-26 20:58:08

标签: linux sudo raspberry-pi gpio

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

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

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

任何帮助都会很棒。

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

1 个答案:

答案 0 :(得分:20)

Rakesh,我一直试图找出完全相同的东西,我想我已经解决了。

您根本不需要了解很多makefile。重要的行如下,当您运行sudo make install

时,这些行在bash中执行
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 [引脚号] /方向等的所有者。

即使您将/ 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。