2

我正在尝试制作 ac 程序来访问嵌入式 linux 系统上的 GPIO,该系统将由非 root 用户运行。我已经可以通过 sysfs (/sys/class/gpio) 访问 GPIO,并制作了一个使用 mmap(通过 /dev/mem/)来控制 GPIO 的简单程序。但是,要写入 /sys/class/gpio/ 和 /dev/mem/,您必须具有 root 权限。在以非 root 用户身份运行的程序中访问 GPIO 的最“正确”或标准方法是什么?
编写设备驱动程序?
授予用户对 /sys/class/gpio/ 的读/写访问权限,以便程序可以使用 sysfs?
或者授予用户对 /dev/mem/ 的读/写访问权限,以便程序可以使用 mmap()?

谢谢

4

2 回答 2

1

一种可能的选择是 通过设置该位来创建进程setuid 。s

例如

chmod +s myExectuable

但是,这具有可怕的安全隐患,因为该过程随后以 root 身份运行 - 伴随着所有危险。如果您真的信任用户空间应用程序,那么只有一个选择,即使那样,也是有风险的。

我认为在不破坏内核的情况下更改 sysfs 的默认所有权和权限是不可能的,即使这样也很棘手:sysfs 与 Linux 驱动程序模型的对象模型有着错综复杂的联系。

您可能对/dev/.

最终,解决这个问题的正确方法是内核模式驱动程序——您可以在其中实现您希望的任何细粒度安全性(或缺乏安全性)。此外,您可以针对允许用户模式应用程序控制硬件的任何潜在不良影响实施缓解措施。

于 2012-10-18T21:39:04.613 回答
1

在 /sys/class/gpio 下授予自定义用户组访问特别需要的节点的权限是一个相当可靠的解决方案 - 它可以完全通过引导脚本完成,不需要内核级编程。

于 2012-10-19T20:17:25.860 回答