当前位置: 首页 > 面试题库 >

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

艾泽语
2023-03-14
问题内容

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

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

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

任何帮助都会很棒。

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


问题答案:

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。



 类似资料:
  • 问题内容: 我在服务器中提取,配置并使用了make作为安装包。 但是,我无法使用 make install 。我得到错误 我运行文件夹 我仍然遇到相同的错误。 如何在没有sudo访问的情况下运行 make install ? 问题答案: 如何安装到主目录下的路径? 然后运行: 同样,如果您的脚本(例如CGI)需要您自己的Python用户版本,则必须明确告诉它们: 而不是使用默认的系统Python,

  • 我在用 Linux 编写的 CUDA 代码中使用了一个库(该库称为 cublas),我可以使用 nvcc 成功编译我的代码,但是当我运行代码时出现此错误: 加载共享库时出错:libcublas.so.7.5:无法打开共享对象文件:没有这样的文件或目录 我发现此链接是一种解决方案,建议运行一些命令以解决问题。基于此链接的一种解决方案是运行以下命令: export LD_LIBRARY_PATH=$L

  • 我刚刚通过nodejs.org上的软件包安装了node和npm,每当我试图搜索或安装npm时,它都会抛出以下错误,除非我执行该命令。我觉得这是一个权限问题?我已经是管理员了。

  • 问题内容: 我想像运行shell命令: 不用任何插件就能做到吗?由于Jenkins不是,而是服务帐户,我该如何添加? 问题答案: 首先执行 然后执行 然后注销 对于注销很重要,因为您需要重新评估组成员身份 登录并重试 有用!

  • 问题内容: 我试图将配置(例如URLs / etc)放入资源文件夹中,以供实用程序类使用。但是,我不想从任何地方的活动中传递上下文。我希望能够通过路径名(似乎使用assess /是为此用途设计的)来访问资源,而无需使用上下文来访问资源。 在这种特殊情况下,我希望单例实例化时在配置中使用某些东西。除了实例化期间的那一次之外,它不需要任何资源。因此,每次调用getInstance()时都必须传递Con

  • 问题内容: 我可以在没有jQuery的情况下访问数据属性吗? 使用jQuery很容易,但是如果没有jQuery,我在任何地方都看不到该怎么做。 如果我在Google上搜索“没有jQuery”,那么我得到的只是jQuery示例。 可能吗 问题答案: 在这里,我找到了这个例子: 因此,它看起来非常可行。