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— a memory-mapped view of a physical address range with volatile read, write, and modify operations (checked and unchecked).register_map!— a declarative macro for defining named register maps with bus-width enforcement, bitfield accessors, typed bitfields (as bool/as u8/as enum, shared enums, and your own types viaFieldValue), and register arrays (requires theregister-mapfeature).- [
web] — an optional [axum]-based web UI for viewing and editing registers at runtime (requires thewebfeature).
§Feature flags
| Feature | Default | Description |
|---|---|---|
device | yes | Real /dev/mem backend via memmap2. |
emulator | no | Page-aligned heap buffer for testing without hardware. |
register-map | yes | The register_map! macro. |
web | no | Web UI for register maps. |
When both device and emulator are enabled, emulator takes
precedence. This lets tests and examples opt into emulation through
dev-dependencies without touching the default features.
§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() };
let status = regs.status(); // full-register read
let enabled = regs.control_enable(); // bitfield read
regs.set_control_mode(0b101); // bitfield read-modify-write
regs.set_command(0xFF); // full-register write
regs.modify_control(|v| v | 1); // full-register read-modify-writeMacros§
- 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.
Enums§
Traits§
- Field
Value - A type a bitfield can be read as and written from:
field: 4..=5 as Type.