嵌入式Linux:硬件访问

时间:2013-06-09 02:47:24

标签: linux embedded embedded-linux raspberry-pi

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

Raspberry Pi的Raspbian / Debian版本提供了库,用于访问GPIO。查看The MagPi的后期问题,了解Python和其他语言中的大量示例。还有the example projects here