如何复制Linux设备文件?

时间:2013-05-06 19:42:28

标签: linux linux-device-driver mmap hardware-interface memory-mapping

在我们的系统中,我们在mmap()文件上使用/dev/mem来访问内存映射的硬件设备。但是,使用此设备文件需要以超级用户模式(sudo)运行应用程序才能写入物理设备。我们正在寻找摆脱这种限制的方法。

据说,可以更改设备文件的访问权限。但是,这不是推荐的解决方案。

我们提出的一个建议是,我们可以复制/dev/mem设备,更改其写入权限,并在新版本上使用mmap(),而不是为硬件编写新的完整内核模式设备驱动程序。设备

阅读几个手册页,我找到了mknod命令。所以我用它来创建一个特殊文件emem,它具有与/dev/mem文件类似的属性(特别是设备的主要版本和次要版本)。在我的程序中使用新文件,我仍然需要duso。因此,我将其属性更改为完整的r / w权限,但它并未改变对sudo的需求。

接下来,我尝试将dev/mem本身的权限更改为0777,但它也没有帮助。

这导致了以下问题:

  1. sudo权限的需求是来自使用mmap()还是来自其映射的特定设备?

  2. 如果是前者,如何消除这个?

  3. 如果是后者,如何以完全权限复制/dev/mem功能?

1 个答案:

答案 0 :(得分:2)

根据http://www.raspberrypi.org/phpBB3/viewtopic.php?f=29&t=22515

  

要打开/ dev / mem,您需要具有常规访问权限   设备文件和安全功能CAP_SYS_RAWIO,或者是root。   没有解决这个问题,因为完全访问内存允许   不仅仅是GPIO。它具有巨大的安全隐患。

这可能是在mem设备驱动程序中检查的。

解决方案是为需要能够访问/ dev / mem CAP_SYS_RAWIO功能的用户提供服务,并将其放入kmem用户组(具有对设备的读访问权限) )。