Python 使用mmap对象写入物理地址

Python 使用mmap对象写入物理地址,python,mmap,pci,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.P

我想直接写入主机的物理内存地址。 据我所知,我需要在进程上分配一个虚拟地址,然后才能使用它。 在我的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\

但是当我检查物理地址的值时,我发现没有做任何更改,甚至重新启动此分区代码都会给我旧的值地址。

使用
map.map\u SHARED
而不是
map.map\u PRIVATE
。从:

MAP\u PRIVATE
在写入映射时创建一个私有副本,因此对mmap对象内容的更改对此进程是私有的,而
MAP\u SHARED
创建一个映射,该映射与映射文件相同区域的所有其他进程共享


我改为MAP_SHARED,但仍然没有更改此物理地址的值。mem_file=os.open(“/dev/mem”,os.O_RDWR | os.O_SYNC)self.mapped_mem=mmap.mmap(mem_文件,四舍五入到页面大小,mmap.MAP_共享,mmap.PROT_读取| MAP.PROT_写入,偏移量=bar0)self.mapped_mem.WRITE('7'))