A Rust library for parsing raw SMBIOS/DMI tables. This crate lets you read and decode system firmware information provided via /sys/firmware/dmi/tables/ on Linux, or directly from memory dumps.
# Cargo.toml
[dependencies]
dmidecode = "1"use dmidecode::Structure;
fn main() -> Result<(), Box<dyn std::error::Error>> {
eprintln!("Collecting DMI Information...");
// Get the SMBIOS header and DMI table from sysfs.
let buf = std::fs::read("/sys/firmware/dmi/tables/smbios_entry_point")?;
let dmi = std::fs::read("/sys/firmware/dmi/tables/DMI")?;
let entry = dmidecode::EntryPoint::search(&buf)?;
for table in entry.structures(&dmi) {
let Ok(table) = table else {
eprintln!("DMI tables contain malformed structure: {table:?}");
continue;
};
match table {
Structure::System(system) => {
// do stuff
}
Structure::BaseBoard(base_board) => {
// do stuff
}
// ...
_ => continue,
}
}
Ok(())
}In no_std mode, almost all of the same API is available and works the same
way. To depend on dmidecode in no_std mode, disable our default enabled
std feature in Cargo.toml.
The std feature just implements the Error trait on error types used by
dmidecode.
[dependencies]
dmidecode = { version = "1", default-features = false }The minimum supported Rust version is documented in the Cargo.toml file. This may be bumped in minor releases as necessary.
dmidecode is released under the terms of the MIT license.