Linux 在没有``sudo的情况下访问(覆盆子pi的)GPIO``

Linux 在没有``sudo的情况下访问(覆盆子pi的)GPIO``,linux,sudo,raspberry-pi,gpio,Linux,Sudo,Raspberry Pi,Gpio,当然,这个问题可能不是针对树莓皮的。另外,我对Linux还比较陌生 我想编写一个小库(在node.js中,如果需要的话)来使用sysfs访问raspberry pi的GPIO。然而,访问sysfs需要sudo访问,这显然是不好的 似乎有一个解决办法,但我想更好地理解它,而不是盲目地使用它。他们当然使用了C语言,但据我所知,代码并不复杂,可能只需要bash就可以完成,即使不那么优雅。然而,最重要的是,我不确定它为什么有效 任何帮助都会很好 编辑:谢谢你的评论。很明显,我需要重新措辞这个问题。下面是

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

我想编写一个小库(在node.js中,如果需要的话)来使用sysfs访问raspberry pi的GPIO。然而,访问sysfs需要sudo访问,这显然是不好的

似乎有一个解决办法,但我想更好地理解它,而不是盲目地使用它。他们当然使用了C语言,但据我所知,代码并不复杂,可能只需要bash就可以完成,即使不那么优雅。然而,最重要的是,我不确定它为什么有效

任何帮助都会很好

编辑:谢谢你的评论。很明显,我需要重新措辞这个问题。下面是:
为什么一旦安装(作为root用户),应用程序就不需要再使用任何root perm了?在这种情况下,将某人添加到组中有什么帮助
/sys/devices/virtual/gpio
不是gpio系统可用的位置,那么这有什么诡计呢?我真的是一个n00b,所以这些问题可能是n00b-ish,所以请容忍我。

拉凯什,我只是想弄清楚完全相同的事情,我想我已经解决了

您根本不需要了解makefile的很多内容。下面是重要的几行,当您运行
sudomakeinstall

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——系统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]/方向等的所有者

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

那么问题是什么?你想把它翻译成bash吗?很抱歉问题不够清晰。我添加了一个编辑。希望这能澄清问题。@cnicutar不希望它本身被翻译。我比C更了解bash(尽管那里的C代码一点也不复杂)。考虑到我的C语言知识,我认为bash脚本比C语言更容易理解。考虑到这段代码(以及makefile)似乎在做一些我不理解的把戏,bash脚本至少可以更好地解释重要部分。这不是一个“给我一个密码”的问题。这更多的是一个“为什么这样做”的问题。@RakeshPai所需的文件在哪里可用?也就是说,在什么绝对路径上。@cnicutar本机/原始系统?那是在
/sys/class/gpio
。相关报道:我有理由相信我的问题和GPIO或树莓pi无关。我认为这只是关于用户、组、权限,以及它如何工作的问题,因为有些东西需要sudo,但你不想公开它。谢谢你迄今为止的帮助。谢谢哈利。这很有帮助。您是否还可以找出/sys/devices/virtual/gpio路径的处理方式,其中默认情况下不存在“virtual”?