使用mmap对象写入物理地址

时间:2019-06-20 15:28:54

标签: python mmap pci

我想直接写入主机的物理内存地址。 据我所知,我需要在进程中分配一个虚拟地址,然后才能使用它。 在我的Python代码中,我看到内存值已更改,但在物理内存地址中未发生此更改。

mem_file = os.open("/dev/mem", os.O_SYNC)
bar0 = 0x92000000
mapped_memory = mmap.mmap(mem_file, rounded_to_pagesize , 
mmap.MAP_PRIVATE, mmap.PROT_READ | mmap.PROT_WRITE, 0, bar0)
mapped_memory.read(4)
output: '\x00\x1a\x00\x10'
mapped_memory.seek(0)
mapped_memory.write('0x1')
mapped_memory.seek(0)
mapped_memory.read(4)
output: '0x1\x10\x00\x05\

但是当我检查物理地址的值时,我发现没有做任何更改,即使重新启动此段代码也将得到旧的值地址。

1 个答案:

答案 0 :(得分:1)

使用map.MAP_SHARED代替map.MAP_PRIVATE。来自documentation

  

MAP_PRIVATE创建一个私有的写时复制映射,因此对mmap对象内容的更改将是此进程的私有属性,并且MAP_SHARED创建一个与所有其他进程共享的映射文件的相同区域。