一、devmem命令简介
DevMem 是一个适用于嵌入式系统的命令,用于读写内存,其可以在Linux下运行。该命令的作用是直接读写系统内存,不同于其他常规的二进制读写命令,例如hexdump、dd等,该命令主要集中在系统的物理地址访问上。DevMem 命令的缺点是只能访问内存地址,并不能访问系统其他部件的地址。它使用了/dev/mem,使其可以读取和写入物理内存地址。
二、devmem命令用法
1.命令语法:
devmem ADDRESS [TYPE [VALUE]]
2.命令参数:
ADDRESS: 必选参数,用于定义要读写的物理地址。
TYPE: 可选参数,指定读写类型,取值为b (byte), h (halfword), w (word), 默认为w。
VALUE: 可选参数,用于写操作时指定写入值。
三、devmem命令示例
1. 将物理地址 0x100000 处的 4 字节值更改为 0x11223344
devmem 0x100000 w 0x11223344
2. 以字节形式读取物理地址 0x100000 的值
devmem 0x100000 b
3. 以半字形式读取物理地址 0x100000 的值
devmem 0x100000 h
4. 读取物理地址 0x100000 的值
devmem 0x100000
四、devmem命令应用实例
1. 使用DevMem写入FPGA的RAM
在FPGA系统中,RAM是存储动态数据的重要组成部分。例如,一个视频帧,需要暂存一张图片,这就需要一个随时可用的RAM。使用DevMem命令可以将所需数据写入FPGA的RAM。
devmem 0x1000000 w 0x11223344
2. 使用DevMem命令读取嵌入式系统中设备的寄存器
在嵌入式系统中,设备之间都是通过寄存器进行通信的,使用devmem命令可以读取寄存器中的值。
devmem 0x20012040
3. 使用DevMem命令在U-Boot中读写NOR Flash
在U-Boot中,可使用 DevMem 命令读写 NOR Flash 的物理地址。这在嵌入式系统的开发中是非常常见的需求。通过DevMem 命令可以方便地在U-Boot中读写NOR Flash中的数据。
1. 读取物理地址 0x0 中 4 字节的值
devmem 0 4 0
2. 将 0xdeadbeef 写入物理地址 0x0 中的 4 字节
devmem 0x0 4 0xDEADBEEF
4. 使用DevMem在Linux内核中读写寄存器
在Linux内核中,也常用到DevMem命令来读取和写入寄存器的值。例如在驱动调试过程中,除了使用 gdb 进行调试,使用 DevMem 命令也是一个常见的调试工具。
五、总结
DevMem 命令是一个非常适用于嵌入式系统的命令,可以直接读写系统内存,非常方便。在嵌入式系统内部进行调试时,使用 DevMem 命令读写寄存器的值可以方便地进行调试。它在 Linux 固件开发中也有着广泛的应用,特别是在对网络设备的调试上特别有用。
