在我们的系统中,我们使用mmap()
文件/dev/mem
来访问内存映射的硬件设备。但是,使用此设备文件需要以超级用户模式 ( sudo
) 运行应用程序才能写入物理设备。我们正在寻找摆脱这种限制的方法。
据说,可以更改设备文件的访问权限。但是,这不是推荐的解决方案。
我们的一个建议是,我们可以复制/dev/mem
设备,更改其写入权限,然后mmap()
在新设备上使用,而不是为硬件编写新的、完整的内核模式设备驱动程序。
阅读了一些手册页,我找到了该mknod
命令。所以我用它来创建一个特殊的文件,emem
具有与文件相似的属性/dev/mem
(尤其是设备的主要和次要版本)。在我的程序中使用新文件,我仍然需要duso
. 因此,我将其属性更改为完整的 r/w 权限,但它并没有改变对sudo
.
接下来,我尝试将dev/mem
自身的权限更改为 0777,但它也没有帮助。
这导致了以下问题:
对
sudo
特权的需求是来自使用mmap()
还是来自它映射的特定设备?如果是前者,如何消除这个?
如果是后者,我怎样才能复制
/dev/mem
具有完全权限的功能?