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;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!