在" / dev / mem"上尝试os.open时权限被拒绝在python中

时间:2017-07-20 18:26:45

标签: python linux arm memory-mapped-files

我正在使用altera cyclone 5 fpga-soc进行嵌入式系统项目。 在真实处理器(ARM)上,我将使用Linux,用于FPGA通信的脚本将在Python 2中实现。

我需要一个存储器映射来通过/dev/mem向FPGA发送数据和从FPGA接收数据。 为了开发脚本,我在虚拟机上使用Lubuntu系统。下面是我在Lubuntu VM上的PyCharm中测试的代码:

def open(self):
    file = os.open("/dev/mem", os.O_RDWR | os.O_SYNC)
    self.map = mmap.mmap(file,
                         self.CONST_mapLength,
                         mmap.MAP_SHARED,
                         prot = mmap.PROT_READ | mmap.PROT_WRITE,
                         offset = self.CONST_offset)
    return

我的问题是我无法打开\ dev \ mem。该脚本以此文结束:

file = os.open("/dev/mem", os.O_RDWR | os.O_SYNC)
OSError: [Errno 13] Permission denied: '/dev/mem'
Process finished with exit code 1

问题是什么,我该如何解决?

2 个答案:

答案 0 :(得分:2)

从我看来,您无权访问文件/ dev / mem。

所以在你打开它之前,你必须得到正确的。

有四种方法可以获得它。

  1. 以root身份运行您的脚本,但这很危险,因为root可以在系统中执行任何操作。

  2. 使用sodu运行您的应用程序,例如" sudo your_python.py"。

  3. 您可以运行此命令" sudo chmod 777 / dev / men",向所有用户开放权限。

  4. 使用命令" sudo usermod -g kmem yourID"

  5. 将您添加到拥有/ dev / mem的组kmem

答案 1 :(得分:0)

我会非常谨慎地编辑甚至打开/dev/mem ,特别是因为你似乎没有关闭它 ...(使用{{1} })

但无论如何,如果您希望linux中的权限访问close()中的任何内容,您应该是root用户或具有sudo权限的用户,因此不要使用以下命令访问您的程序:

dev
你应该:

python whatever.py

假设允许您的用户这样做。如果没有,这意味着你真的是一个没有足够权限的用户,你应该向系统管理员寻求帮助