On Tue, May 07, 2013 at 06:35:43AM +0000, Warlich, Christof wrote: [...]
Furthermore, read / write access through a simple program using /dev/mem _does_ work as expected:
#include <unistd.h> #include <stdio.h> #include <fcntl.h> #include <assert.h> #include <sys/mman.h> int main( int argc, char *argv[]) { char *mem; int fd; fd = open ("/dev/mem", O_RDWR); assert(fd >= 0); mem = mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, (off_t) 0x81423000); assert(mem != MAP_FAILED); printf("Memory pointer: %p\n", mem); printf("The PCI memory is : %#x\n", *mem); *mem = *argv[1]; printf("The PCI memory is : %#x\n", *mem); munmap(mem, getpagesize()); close(fd); return 0; }
Calling it, yields:
$ led 4 Memory pointer: 0xb7678000 The PCI memory is : 0x33 The PCI memory is : 0x34
And the LED matrix display being behind that address switches from 3 to 4 as expected.
Thus, I still cannot see why the access through /dev/mem using dd doesn't work.
I suspect dd uses read instead of mmap. Thanks, Jonathan Neuschäfer