-1

我有一个 Raspberry Pi,要访问 GPIO 引脚或硬件外围设备(例如 I2C、SPI),您需要以 root 身份运行访问这些的程序。或者,您可以将运行该程序的用户添加到该外围设备的组(例如,用于 I2C 的组 i2c)。

我的问题:在现实世界中(例如,一些运行嵌入式 linux 的机器)是简单地将用户添加到程序所需的每个外围设备的每个用户组的标准做法吗?有没有更好的方法来做到这一点?

我的第二个问题:例如,当您使用 C 直接访问硬件寄存器而不是通过 /sys. 我能想到的唯一方法是始终以 root 身份运行,这根本不是一个好主意,或者编写一个处理访问寄存器的内核模块,而用户空间程序与该模块通信(这一切似乎如果有更多“推荐”的方式,就像很多工作一样)。程序通常如何访问嵌入式 Linux 设置上的硬件寄存器?

4

2 回答 2

2
  1. 将所有用户添加到所有必需的组中会很痛苦。你有几个选择。您可以使用setuid 和 setgid机制。使用这种机制,进程获取可执行文件的uid gid,然后可以访问具有正确访问级别的设备。或者,您可以利用sudo机制,您可以在其中允许用户以 root 身份执行程序,并进行一些细粒度的控制。
  2. 现代操作系统中的通用模型是将硬件访问委托给内核驻留设备驱动程序。在 *nix 操作系统中,设备驱动程序通过标准文件系统调用(打开、关闭、读取、写入、ioctl)为用户空间中的程序提供 API。对于大多数驱动程序,ioctl 调用实际上是提供给用户空间的整个 API 的厨房水槽。
于 2013-06-09T03:41:05.307 回答
0

库随 Raspberry Pi 的 Raspbian/Debian 版本一起提供,用于访问 GPIO。查看The MagPi的过刊,了解 Python 和其他语言的大量示例。还有这里的示例项目

于 2013-06-09T07:56:43.607 回答