Linux在应用层读写寄存器的方法及实现实例
Linux在应用层读写寄存器的方法
可以通过操作/dev/mem设备文件,以及mmap函数,将寄存器的地址映射到用户空间,直接在应用层对寄存器进行操作,示例如下:
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<unistd.h> #include<fcntl.h> #include<unistd.h> #include<sys/mman.h> #defineAUDIO_REG_BASE(0xB800E000) #defineMAP_SIZE0xFF staticintdev_fd; intmain(intargc,char**argv) { dev_fd=open("/dev/mem",O_RDWR|O_NDELAY); if(dev_fd<0) { printf("open(/dev/mem)failed."); return0; } unsignedchar*map_base=(unsignedchar*)mmap(NULL,MAP_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,dev_fd,AUDIO_REG_BASE); printf("%x\n",*(volatileunsignedint*)(map_base+0x38));//打印该寄存器地址的value #if1//LINEIN printf("%x\n",*(volatileunsignedint*)(map_base+0x30)); *(volatileunsignedint*)(map_base+0x30)=0x208121bc;//修改该寄存器地址的value usleep(1000000); *(volatileunsignedint*)(map_base+0x30)&=~(0x1<<16);//修改该寄存器地址的value usleep(1000000); printf("%x\n",*(volatileunsignedint*)(map_base+0x30)); #endif if(dev_fd) close(dev_fd); munmap(map_base,MAP_SIZE);//解除映射关系 return0; }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!