一文剖析内核调试之devmem直接读写寄存器
今天分享一个内核调试实用工具——devmem。
相信很多做底层驱动的人都会经常用到。
什么是devmem?
在Linux系统,如果我们想要访问某个寄存器,就需要写一个驱动程序,在驱动中映射寄存器地址,转为虚拟地址后就可以访问。
但有时候,我们只是单纯想知道某个寄存器的值,不想这么麻烦,怎么办呢?
Linux早就想到这一点了,于是提供了一个工具devmem,通过devmem就可以直接读写寄存器,
devmem是一个命令,在shell中输入devmem命令就可以非常方便的读写寄存器。
如何使用devmem?
devmem命令格式:
ADDRESS:物理地址
WIDTH:位宽,32位、64位等等
VALUE:要写入的值
例如,读取32位寄存器0x40200000的值:
向32位寄存器0x40200000写入0x12345678
可以看到,devmem的使用非常简单,有了devmem就可以轻松访问寄存器。
内核配置devmem
devmem命令依赖于/dev/mem设备节点,需要在Linux内核中打开/dev/mem的配置:

【文章福利】小编推荐自己的Linux内核技术交流群:【749907784】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!(含视频教程、电子书、实战项目及代码)


Linux应用层操作寄存器
除了直接使用devmem,我们也可以在Linux应用层自己实现一个devmem。
devmem的实现原理,就是打开/dev/mem,然后通过mmap映射物理地址,从而实现读写寄存器。因此,我们只要实现这些操作,就可以自己实现类似devmem的功能。
例如,在Linux应用层读取物理地址为0x40000000的值:
总结
devmem是一个很常用的工具,主要给驱动开发人员在Linux应用层调试使用。devmem不仅仅是访问寄存器,只要有权限访问某个物理地址,就可以使用devmem,方便我们调试。
原文作者:嵌入式Linux充电站
