3 个不稳定版本
0.3.0 | 2023年9月25日 |
---|---|
0.2.1 | 2023年2月25日 |
0.2.0 | 2023年2月24日 |
0.1.0 |
|
0.0.1 |
|
#831 in Unix API
10KB
89 行
peekpoke
一个用于通过 /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
- 使用
CONFIG_STRICT_DEVMEM=n
(推荐)配置您的内核。默认内核配置会拒绝非 root 用户使用/dev/mem
访问 RAM(默认:CONFIG_STRICT_DEVMEM=y
)。 - 以 root 用户运行。
地址无效
/dev/mem
的默认行为是在地址无效时返回错误。请参阅您的硬件手册以获取进一步故障排除步骤。
交叉编译
对于嵌入式系统开发,可能需要将您的应用程序交叉编译到不同的架构上运行。有关此过程的更多信息,请查看 Rust 的以下 GitHub 仓库示例 交叉编译。
许可
无运行时依赖
~0-2MB
~40K SLoC