内核配置devmem
devmem命令依赖于/dev/mem设备节点,需要在Linux内核中打开/dev/mem的配置:
Device Drivers --- >
Character devices --- >
[*] /dev/mem virtual device support
Linux应用层操作寄存器
除了直接使用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 >
#define MAP_SIZE 0x80000
#define base 0x40000000
int main(int argc, char **argv)
{
int fd = 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",*(volatile unsigned int*)(map_base));
close(fd);
munmap(map_base,MAP_SIZE);
return 0;
}
总结
devmem是一个很常用的工具,主要给驱动开发人员在Linux应用层调试使用。devmem不仅仅是访问寄存器,只要有权限访问某个物理地址,就可以使用devmem,方便我们调试。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网
网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
寄存器
+关注
关注
31文章
5336浏览量
120224 -
内核
+关注
关注
3文章
1372浏览量
40275 -
Linux
+关注
关注
87文章
11292浏览量
209317 -
RISC
+关注
关注
6文章
462浏览量
83707 -
应用层
+关注
关注
0文章
46浏览量
11500
发布评论请先 登录
相关推荐
嵌入式linux驱动对gpio的基本操作
;amp;amp;gt;&amp;gt;&amp;gt;应用编写(闪烁灯)。目标板是iTOP4412。CPU为 Exynos4412。代码代码部分包括 驱动层代码对GPIO寄存器的直接操作。然后是
发表于 11-05 07:59
寄存器变量
C语言中使用关键字register来声明局部变量为寄存器变量。寄存器变量的值会被存放在CPU的寄存器中,每当需要使用它们时,CPU就可以直接使用,而无须再通过控制器从内存中获取。由于
发表于 06-03 10:13
•2362次阅读
嵌入式Linux驱动 GPIO操作 包括驱动和应用层程序对驱动进行测试
;amp;amp;amp;amp;gt;&amp;amp;gt;&amp;amp;gt;应用编写(闪烁灯)。目标板是iTOP4412。CPU为 Exynos4412。代码代码部分包括 驱动层代码对GPIO寄存器的直接
发表于 11-02 14:36
•10次下载
STM32的寄存器操作
STM32的寄存器操作在使用STM32单片机编程时一般都用ST给的库函数编程,库函数编程的底层就是对单片机寄存器的操作,库函数就是一系列寄存器
发表于 01-13 15:43
•19次下载
Linux驱动操作寄存器
,第四个参数是映射的大小。 驱动中操作: #define OFFSET 0x60 //某个寄存器的偏移地址 static int my_probe(struct platform_device
如何在shell中操作寄存器
shell 中操作寄存器可以使用 devmem 命令. devmem 命令其实就是上述应用层操作寄存器生成的可执行文件,只不过busybox
评论