Expand description
§ddevmem
Safe and ergonomic access to physical memory via /dev/mem, with volatile
read/write semantics suitable for memory-mapped I/O (MMIO).
This crate provides:
DevMem— memory-mapped access to a physical address range with volatile read, write, and modify operations.register_map!— declarative macro for defining named register maps with optional bus-width enforcement, bitfield accessors, and typed bitfields (as bool/as u8/as enum) (requires theregister-mapfeature).
§Feature flags
| Feature | Default | Description |
|---|---|---|
device | yes | Real /dev/mem backend via memmap2. |
emulator | no | In-memory Vec<u8> backend for testing without hardware. |
register-map | yes | register_map! macro with bitfields and typed accessors. |
web | no | Web UI for viewing/editing registers via [axum]. |
Enable exactly one of device or emulator. When both are enabled
simultaneously the emulator backend takes precedence.
§Quick start
use std::sync::Arc;
use ddevmem::{register_map, DevMem};
register_map! {
pub unsafe map Regs (u32) {
0x00 => rw control: u32 {
enable: 0,
mode: 1..=3
},
0x04 => ro status: u32,
0x08 => wo command: u32
}
}
let devmem = unsafe { DevMem::new(0x4000_0000, None).unwrap() };
let mut regs = unsafe { Regs::new(Arc::new(devmem)).unwrap() };
// Read a full register
let status = regs.status();
// Read a single-bit bitfield
let enabled = regs.control_enable();
// Write a multi-bit bitfield (read-modify-write)
regs.set_control_mode(0b101);
// Write a full register
regs.set_command(0xFF);
// Read-modify-write
regs.modify_control(|v| v | 1);Macros§
- register_
map - Declares a named register map backed by a
DevMeminstance.
Structs§
- DevMem
- A memory-mapped view of a physical address range obtained from
/dev/mem.