0

在我们的系统中,我们使用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具有完全权限的功能?

4

1 回答 1

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用户组(对设备具有读取权限)。

于 2013-05-06T19:49:29.493 回答