devmem命令依赖于/dev/mem设备节点,需要在Linux内核中打开/dev/mem的配置:
Device Drivers--- >Characterdevices--- >[*] /dev/mem virtual device support
除了直接使用devmem,我们也可以在Linux应用层自己实现一个devmem。
devmem的实现原理,就是打开/dev/mem,然后通过mmap映射物理地址,从而实现读写寄存器。因此,我们只要实现这些操作,就可以自己实现类似devmem的功能。
例如,在Linux应用层读取物理地址为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; }
devmem是一个很常用的工具,主要给驱动开发人员在Linux应用层调试使用。devmem不仅仅是访问寄存器,只要有权限访问某个物理地址,就可以使用devmem,方便我们调试。
全部0条评论
快来发表一下你的评论吧 !