驱动中操作寄存器,需要先进行映射将物理地址转为虚拟地址。
但如果想在应用层中操作寄存器,也是可以实现的。
应用层中只需打开/dev/mem
设备节点,然后用mmap
映射寄存器地址就可以访问了。
例如,应用层读取物理地址为0x40000000
的值:
#include< stdio.h >#include< stdlib.h >#include< time.h >#include< unistd.h >#include< fcntl.h >#include< unistd.h >#include< sys/mman.h >#defineMAP_SIZE 0x80000#definebase 0x40000000intmain(intargc,char**argv){intfd =open("/dev/mem",O_RDWR|O_NDELAY);if(fd <0) {printf("open /dev/mem error!n");return-1; }void*map_base =mmap(NULL,MAP_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,base);if(map_base == MAP_FAILED)return-1;printf("%x n",*(volatileunsignedint*)(map_base));close(fd);munmap(map_base,MAP_SIZE);return0; }
注意,内核必须将CONFIG_STRICT_DEVMEM=y配置选项打开才有/dev/mem节点
全部0条评论
快来发表一下你的评论吧 !