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 — 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 the register-map feature).

§Feature flags

FeatureDefaultDescription
deviceyesReal /dev/mem backend via memmap2.
emulatornoIn-memory Vec<u8> backend for testing without hardware.
register-mapyesregister_map! macro with bitfields and typed accessors.
webnoWeb 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 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.