Heng30的博客
搜索 分类 关于 订阅

在Linux中使用devmem快速操作物理地址

2025-02-21

在调试嵌入式Linux开发板的过程中,很多时候都需直接操作物理地址。例如设置GPIO地址。如果单独写一个驱动,就有点高射炮打蚊子了。正好在有一个工具devmem能快速操作物理地址。

devmem是一个用于直接访问和操作物理内存的Linux命令行工具。它通常用于嵌入式系统开发或调试,允许用户读取或写入特定的物理内存地址。

功能

  • 读取内存:从指定的物理内存地址读取数据。

  • 写入内存:向指定的物理内存地址写入数据。

  • 调试硬件:常用于调试硬件寄存器或访问底层硬件资源。

语法

devmem ADDRESS [WIDTH [VALUE]]
  • ADDRESS:要访问的物理内存地址。

  • WIDTH:数据宽度(可选,默认为 32 位),可以是 8、16、32 或 64。

  • VALUE:要写入的值(可选,如果未提供,则执行读取操作)。

安装

sudo apt install busybox

或者

sudo apt install devmem2

启用内核功能:

  • 运行make menuconfig

  • Device Drivers->Character devices->/dev/mem virtual device support启用

可以通过查看是否有字符设备/dev/mem,来检查是否启用了该内核功能。

示例

  • 读取32位内存地址0x100000的值

    busybox devmem 0x100000 32
    
    或者
    
    devmem2 0x100000 w
    
  • 向32位内存地址0x100000写入值0x12345678

    busybox devmem 0x100000 32 0x12345678
    
    或者
    
    devmem2 0x100000 w 0x12345678
    
  • 读取16位内存地址0x100000的值

    busybox devmem 0x100000 16
    
    或者
    
    devmem2 0x100000 h
    

总结

devmem 是一个强大的底层工具,适用于需要直接访问硬件资源的场景,但需要root权限才能使用,所以使用时需格外小心。