【问题标题】:Permission denied when trying os.open on "/dev/mem" in python在 python 中的“/dev/mem”上尝试 os.open 时权限被拒绝
【发布时间】:2017-07-20 18:26:45
【问题描述】:

我正在使用 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

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

【问题讨论】:

  • 你必须是root
  • 您有正确的权限吗?通过手动打开或修改文件来检查它,然后在必要时使用 chmod 进行更改
  • 您不应更改 /dev 中任何内容的权限或所有权,因为它们将受内核控制。
  • @PRMoureu 这是个坏建议,/dev/mem 不是普通文件
  • @OferSadan 好的,谢谢,我的错...我让评论作为不做的事情。

标签: python linux arm memory-mapped-files


【解决方案1】:

在我看来,你无权访问文件/dev/mem

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

有四种获取方式。

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

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

  3. 你可以运行这个命令sudo chmod 777 /dev/men,对所有用户开放权限。

  4. 使用命令sudo usermod -g kmem yourID将你添加到拥有/dev/mem的组kmem中

【讨论】:

    【解决方案2】:

    我会非常小心地编辑甚至打开/dev/mem尤其是因为你似乎没有关闭它...根本不(使用close()

    但无论如何,如果您希望在 linux 中获得访问 dev 中任何内容的权限,您应该是 root 用户或具有 sudo 权限的用户,因此不要使用以下方式访问您的程序:

    python whatever.py
    

    你应该:

    sudo python whatever.py
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-23
      • 2015-12-27
      • 2022-11-01
      • 2011-05-23
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多