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;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
热门推荐
1 如何训练狗狗不叫
2 训练狗狗不叫
3 训练狗狗随行
4 怎么训练狗狗不叫
7 训练比熊狗狗教程
10 上海狗狗训练
11 怎么训练狗狗上厕所
12 训练狗狗趴下
13 狗狗服从训练
14 训练狗狗拒食
15 训练狗狗笑
16 训练狗狗大便
17 训练狗狗立
18 训练狗狗捡东西