为什么mmap返回大小为零?

时间:2013-05-08 16:16:30

标签: python linux embedded-linux mmap

我正在使用beaglebone(运行Angstrom Linux)并尝试使用Python的mmap模块来获取对/dev/mem文件的读写权限。

但是,出于某种原因,下面的代码打印的值为零。我对mmap相当陌生,我不确定是否有一些我不知道的东西。

from mmap import mmap

mmap_offset=0x44c00000
mmap_size=0x48ffffff-mmap_offset

with open("/dev/mem", "r+b") as f:
    testMap=mmap(f.fileno(),mmap_size,offset=mmap_offset)

print testMap.size()
print testMap[0]

返回:

0
8

1 个答案:

答案 0 :(得分:1)

因为/dev/mem查询的设备inode在stat()查询时报告的大小为0。这就是特殊设备节点的实现方式,因为询问设备节点的大小并不常见。 (请考虑/dev/zero/dev/kbd/dev/urandom以及用于通信而非数据存储的任何设备节点,例如代表照片扫描仪或输入设备的设备节点。)

您仍然可以从mmap句柄中检索数据。