#physical-memory #memory-access #linux #memory #bindings #read-write #devmem

peekpoke

peekpoke - 一个用于在 Linux 中通过 /dev/mem 访问物理地址的轻量级 Rust 库

3 个不稳定版本

0.3.0 2023年9月25日
0.2.1 2023年2月25日
0.2.0 2023年2月24日
0.1.0 2023年2月23日
0.0.1 2023年2月23日

#831 in Unix API

MIT/Apache

10KB
89

peekpoke

Latest Version Documentation Downloads License

一个用于通过 /dev/mem 读写物理内存地址的轻量级 Rust 库。

在 Linux 中,/dev/mem 是一个字符设备文件,包含对系统物理内存的访问。该文件可用于读取和写入裸金属(或虚拟化)硬件上的物理地址。此用户空间应用程序的功能类似于 busybox 中的 devmem 命令行工具。

有关更多信息,请参阅 Linux 内核 手册

需求

  • Linux (WSL, Debian, Fedora, Arch)
  • Sudo 权限

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
peekpoke = "0.3"

示例

let address: u32 = 0x4000_0000;
let value: u32 = 0xDEAD_BEEF;

peekpoke::write(address, value);

let result: u32 = peekpoke::read(address);

println!("{:#010X}", result); // 0xDEAD_BEEF 

故障排除

无法访问 /dev/mem

  1. 使用 CONFIG_STRICT_DEVMEM=n(推荐)配置您的内核。默认内核配置会拒绝非 root 用户使用 /dev/mem 访问 RAM(默认:CONFIG_STRICT_DEVMEM=y)。
  2. 以 root 用户运行。

地址无效

/dev/mem 的默认行为是在地址无效时返回错误。请参阅您的硬件手册以获取进一步故障排除步骤。

交叉编译

对于嵌入式系统开发,可能需要将您的应用程序交叉编译到不同的架构上运行。有关此过程的更多信息,请查看 Rust 的以下 GitHub 仓库示例 交叉编译

许可

Peekpoke 在 MIT 许可证 的条款下分发。有关条款和条件,请参阅此处

无运行时依赖

~0-2MB
~40K SLoC