#include #include #include #include #include #define UIO_DEV "/dev/uio0" #define UIO_ADDR "/sys/class/uio/uio0/maps/map0/addr" #define UIO_SIZE "/sys/class/uio/uio0/maps/map0/size" static char uio_addr_buf[16], uio_size_buf[16]; int main( int argc, char **argv ) { int uio_fd, addr_fd, size_fd; int uio_size; void *uio_addr, *access_address; addr_fd = open( UIO_ADDR, O_RDONLY ); size_fd = open( UIO_SIZE, O_RDONLY ); uio_fd = open( UIO_DEV, O_RDONLY ); if( addr_fd<0 || size_fd<0 || uio_fd<0 ) { fprintf(stderr,"Kann UIO-Dateien nicht öffnen...\n"); return -1; } read( addr_fd, uio_addr_buf, sizeof(uio_addr_buf) ); read( size_fd, uio_size_buf, sizeof(uio_size_buf) ); uio_addr = (void *)strtoul( uio_addr_buf, NULL, 0 ); uio_size = (int)strtol( uio_size_buf, NULL, 0 ); access_address = mmap(NULL, uio_size, PROT_READ, MAP_SHARED, uio_fd, 0); printf("Auf die HW-Adresse %p (Länge %d) kann über\n" "die logischer Adresse %p zugegriffen werden.\n", uio_addr, uio_size, access_address); // Ab hier kann der Zugriff auf die Hardware-Register erfolgen... // ... return 0; }