我想直接写入主机的物理内存地址。 据我所知,我需要在进程中分配一个虚拟地址,然后才能使用它。 在我的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\
但是当我检查物理地址的值时,我发现没有做任何更改,即使重新启动此段代码也将得到旧的值地址。
答案 0 :(得分:1)
使用map.MAP_SHARED
代替map.MAP_PRIVATE
。来自documentation:
MAP_PRIVATE
创建一个私有的写时复制映射,因此对mmap对象内容的更改将是此进程的私有属性,并且MAP_SHARED
创建一个与所有其他进程共享的映射文件的相同区域。