在Linux开发中着实用到的调试工具并不是很多。devmem的方式是提供给驱动开发人员,在应用层能够侦测内存地址中的数据变化,以此来检测驱动中对内存或者相关配置的正确性验证。
其实这个工具的原理也比较简单,就是应用程序通过mmap函数实现对/dev/mem驱动中mmap方法的使用,映射了设备的内存到用户空间,实现对这些物理地址的读写操作。使用方法:
- 用法: devmem2 { address } [ type [ data ] ]
- address : 物理地址
- 如果是要修改该地址的数据,需要填入下面的参数;如果只是读取,省略即可
- type :要访问的数据类型 : [b]yte, [h]alfword, [w]ord
- data :想要写入的数据
通过使用,发现IO内存和物理内核都可以读写。
-----------------------------------------------------------------------------------------
在后来的模块调试中,有一次需要查看内核虚拟地址中的数据,我又想起了“/dev/kmem”,直接就在网上找了一个通过这个节点读取
(仅支持读取)内核虚拟地址中的数据。
经过测试,只适用于内核逻辑地址。
加入Makefile后打包,分享如下:
源码下载地址:
使用/dev/kmem读取内核变量的值
使用方法:
- 用法: devkmem { address }
- address : 虚拟地址(内核逻辑地址)
-----------------------------------------------------------------------------------------------
/dev/mem和/dev/kmem其实是在同一个驱动中代码中产生的:drivers/char/mem.c