I'm trying to read and write from /dev/mem on a linux system using the mmap module. When I run this minimal example: ------------------------------- import os, mmap
MAP_MASK = mmap.PAGESIZE - 1 addr = 0x48088024 f = os.open("/dev/mem", os.O_RDWR | os.O_SYNC) m = mmap.mmap(f, mmap.PAGESIZE, mmap.MAP_SHARED, mmap.PROT_WRITE | mmap.PROT_READ, offset=addr & ~MAP_MASK) m.seek(addr & MAP_MASK) c = m.read_byte() print c m.close() os.close(f) ------------------------------- I get the following error: Unhandled fault: external abort on non-linefetch (0x1018) at 0x40020024 Bus error and python crashes. What is odd is that if I try to read the same memory address using the devmem2 program (i'll attach the source at the end), everything works fine. Here are the truncated straces for each program: ----- devmem2 0x48088024 ----- open("/dev/mem", O_RDWR|O_SYNC) = 3 fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4001f000 write(1, "/dev/mem opened.\n", 17) = 17 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x48088) = 0x40020000 write(1, "Memory mapped at address 0x40020"..., 37) = 37 write(1, "Value at address 0x48088024 (0x4"..., 46) = 46 munmap(0x40020000, 4096) = 0 close(3) = 0 io_submit(0, 0, 0xfbad2088 <unfinished ... exit status 0> Process 1635 detached ------ the above minimal python example ----- open("/dev/mem", O_RDWR|O_SYNC|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFCHR|0640, st_rdev=makedev(1, 1), ...}) = 0 dup(3) = 4 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0x48088) = 0x40020000 --- SIGBUS (Bus error) @ 0 (0) --- +++ killed by SIGBUS +++ Process 1633 detached Am I using mmap incorrectly? -- http://mail.python.org/mailman/listinfo/python-list