# devmem

`devmem` 是 Linux 系统中用于直接访问物理内存的命令行工具，支持对内存映射 I/O（ MMIO）的读写操作，常用于开发、调试和底层系统配置‌。


## 语法说明

以下是执行 `devmem --help` 输出的 Usage：

```bash
Usage: devmem ADDRESS [WIDTH [VALUE]]

Read/write from physical address

        ADDRESS Address to act upon
        WIDTH   Width (8/16/...)
        VALUE   Data to be written
```

## 参数选项说明

- ADDRESS：物理地址，需要读取或写入的内存地址，可以是十进制或十六进制形式。。
- WIDTH：可选参数，指定读取或写入的数据宽度，可选值包括：
  - 8 ： 8 位（字节）
  - 16 ： 16 位（字节）
  - 32 ： 32 位（字节）
  - 64 ： 64 位（字节）
  - 默认值为 32 位（字节）
- VALUE：可选参数，当进行写入操作时，指定要写入的数据值。

## 各项命令选项及其功能说明

### 读取物理地址数据

以 `aon_gpio_0` 管脚为例，其基地址和驱动力对应地址如图：

![devmem](../linux_command_manual/_static/_image/cmd_devmem/devmem.png)

命令：

```bash
root@buildroot:~# devmem 0x31040000 32
```

功能：

读取物理地址 0x31040000 上的 32 位数据

打印输出：

```bash
root@buildroot:/userdata/gmsl# devmem 0x31040000 32
0x06060606
```

字段解析

读取数据的第 [12:9] 位，与文档中默认的驱动力值 3 一致。

### 写入数据到物理地址

命令：

```bash
devmem 0x31040000 32 0x06060806
```

功能：

将指定的 0x06060806 写入到物理地址 0x31040000 ，对应驱动力等级为 4 ，数据宽度为 32 位。

打印输出：

通过回读 0x31040000 地址，确认写入成功。

```bash
root@buildroot:/userdata/gmsl# devmem 0x31040000 32
0x06060806
```

<font color=red> 注意：</font>

此次修改仅作示例参考， GPIO 引脚的驱动力等级需与硬件设计匹配，不可随意调整。
