常用Linux内核调试手段介绍 03——— 内核笔记


活动地址:CSDN21天学习挑战赛

三、devmem直接读写寄存器进行调试

调试

1、printk 调试

2、动态打印

3、devmem 调试

devmem直接读写寄存器进行调试,硬件工程师将硬件设计好时需要简单的测试程序来看看CPU是否可以正确地读取新硬件系统,在正规的linux操作方式下,必须要有硬件的驱动程序才能完成这个需求。然而有时只是为了做简单的硬件寄存器读写动作,就开发驱动程序实在是不划算,为了克服这尴尬的情况, Linux的devmem命令油然而生。

3.1 配置devmem

make ARCH = arm menuconfig
在这里插入图片描述

​3.2 devmem 的使用

devmem的使用方式语法:
devmem ADDRESS [WIDTH [VALUE]]

  • ADDRESS:要直接读写的地址
  • WIDTH :指定读写资料的位数(8/16/32…)
  • VALUE :要写入的资料

  • 读32位: devmem 0x6900000
  • 读16位: devmem 0x6900000 16
  • 读8位: devmem 0x6900000 8

  • 写32位: devmem 0x34000000 32 0x12345678
  • 写16位: devmem 0x34000000 16 0x1234.
  • 写8位: devmem 0x34000000 8 0x12

示例:使用的是rv1126 核心板

[root@RV1126_RV1109:/]# devmem 0x6900000 8
0xFF
[root@RV1126_RV1109:/]# devmem 0x6900000 16
0xFFFF
[root@RV1126_RV1109:/]# devmem 0x6900000 
0xFFFFFFFF
[root@RV1126_RV1109:/]# 
[root@RV1126_RV1109:/]# 
[root@RV1126_RV1109:/]# devmem 0x6900000  32 0x12345678
[root@RV1126_RV1109:/]# 
[root@RV1126_RV1109:/]# devmem 0x3400000  16 0x1234
[root@RV1126_RV1109:/]# 
[root@RV1126_RV1109:/]# devmem 0x1800000  8  0x69
[root@RV1126_RV1109:/]# 
[root@RV1126_RV1109:/]# 
[root@RV1126_RV1109:/]# devmem 0x6900000  
0x12345678
[root@RV1126_RV1109:/]# devmem 0x1800000  
0xFFFFFF69
[root@RV1126_RV1109:/]# devmem 0x3400000  
0xFFFF1234
[root@RV1126_RV1109:/]# 
[root@RV1126_RV1109:/]# 

扩展:devkmem 虚拟地址

[root@RV1126_RV1109:/]# devkmem
-/bin/sh: devkmem: not found
[root@RV1126_RV1109:/]#

没有找到是上面在配置的时候没有配置上
功能用法跟 devmem 一样

devmem和devkmem 深入可以参考此文章:
可以一眼卡卡