对于驱动调试有用的两个小工具(devmem2、devkmem)

来源:互联网 发布:js 数字格式化成2位 编辑:程序博客网 时间:2024/05/18 23:12
    前段时间一个学习Linux的朋友问我:“可不可以在调试设备驱动的时候,利用一个小工具来查看CPU中寄存器的值?”我当时对他说:“一般都是Printk打印出来的。”后来这个朋友自己去找了资料告诉我:好像用/dev/mem可以实现。后来我自己找了以下相关的资料,发现正好是我当年没有继续学习的《LDD3》的《第十五章 内存映射和DMA》是知识,惭愧惭愧阿~~~~~
    后来我开始学习了一下《LDD3》的《第十五章 内存映射和DMA》(内容太多,还在努力),也顺便请教了一下同事。一个比较资深的同事说:已经有这样的工具了,就是利用/dev/mem的,叫做devmem2。后来我自己找了一下这个工具的源码。这个工具的源码简单,google一下到处都是,这里随便给出一两个地址:
http://sources.buildroot.net/devmem2.c
https://dev.openwrt.org/browser/packages/utils/devmem2/src/devmem2.c
我自己下载后顺手搞了个Makefile后打包,分享如下:
 devmem2.zip   

   其实这个工具的原理也比较简单,就是应用程序通过mmap函数实现对/dev/mem驱动中mmap方法的使用,映射了设备的内存到用户空间,实现对这些物理地址的读写操作。使用方法:
  1. 用法:devmem2 { address } [ type [ data ] ]
  2. address : 物理地址
  3. 如果是要修改该地址的数据,需要填入下面的参数;如果只是读取,省略即可
  4. type :要访问的数据类型 : [b]yte, [h]alfword, [w]ord
  5. data :想要写入的数据
通过使用,发现IO内存和物理内核都可以读写。
-----------------------------------------------------------------------------------------
  在后来的模块调试中,有一次需要查看内核虚拟地址中的数据,我又想起了“/dev/kmem”,直接就在网上找了一个通过这个节点读取(仅支持读取)内核虚拟地址中的数据。经过测试,只适用于内核逻辑地址。
加入Makefile后打包,分享如下:
 devkmem.zip   

源码下载地址:使用/dev/kmem读取内核变量的值
使用方法:
  1. 用法: devkmem { address }
  2. address : 虚拟地址(内核逻辑地址)
-----------------------------------------------------------------------------------------------
/dev/mem和/dev/kmem其实是在同一个驱动中代码中产生的:drivers/char/mem.c
如果想知道具体的情况,建议大家认真学习《LDD3》的《第十五章 内存映射和DMA》,然后自己分析源码。
我对这部分的学习笔记分了好几个部分,尚在更新中:《第十五章 内存映射和DMA》

网上简要的描述:Linux下/dev/mem和/dev/kmem的区别

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(178) | 评论(0) | 转发(0) |
0

上一篇:输入子系统架构分析

下一篇:sublime text 3 取消自动检查更新的解决办法以及注册的方法

相关热门文章
  • 对于驱动调试有用的两个小工具...
  • 工作日志--提升效率篇...
  • 欢迎诈金花语音报大小工具在Ch...
  • 欢迎打麻将语音报大小工具是什...
  • 欢迎扑克语音报大小工具在Chin...
  • linux 常见服务端口
  • xmanager 2.0 for linux配置
  • 【ROOTFS搭建】busybox的httpd...
  • openwrt中luci学习笔记
  • 什么是shell
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
原创粉丝点击