Skip to main content

Crate ddevmem

Crate ddevmem 

Source
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 via FieldValue), and register arrays (requires the register-map feature).
  • [web] — an optional [axum]-based web UI for viewing and editing registers at runtime (requires the web feature).

§Feature flags

FeatureDefaultDescription
deviceyesReal /dev/mem backend via memmap2.
emulatornoPage-aligned heap buffer for testing without hardware.
register-mapyesThe register_map! macro.
webnoWeb 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-write

Macros§

register_map
Declares a named register map backed by a DevMem instance.

Structs§

DevMem
A memory-mapped view of a physical address range obtained from /dev/mem.

Enums§

Error
Error returned when creating a DevMem instance.

Traits§

FieldValue
A type a bitfield can be read as and written from: field: 4..=5 as Type.