запись по физическому адресу с использованием объекта mmap - PullRequest
1 голос
/ 20 июня 2019

Я хочу записать напрямую в адрес физической памяти хоста. Насколько я знаю, мне нужно выделить виртуальный адрес в моем процессе, и тогда я смогу с ним работать. В моем коде 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 Ответ

1 голос
/ 20 июня 2019

Используйте map.MAP_SHARED вместо map.MAP_PRIVATE. Из документации :

MAP_PRIVATE создает частное отображение копирования при записи, поэтому изменения содержимого объекта mmap будут частными для этого процесса, а MAP_SHARED создает отображение, которое используется всеми остальными процессами, отображающими те же области файл.

...