9个版本
0.4.5 | 2024年2月25日 |
---|---|
0.4.4 | 2024年2月24日 |
0.4.3 | 2021年7月6日 |
0.4.2 | 2020年8月15日 |
0.1.1 | 2020年5月28日 |
#248 in 嵌入式开发
2,115 每月下载量
用于 fdtdump
77KB
1.5K SLoC
fdt-rs
嵌入式无std环境的平坦设备树解析器
使用方法
将以下内容添加到您的 Cargo.toml
[dependencies.fdt-rs]
version = "0.4"
并将以下内容添加到您的crate根目录
extern crate fdt_rs;
特性
此crate可以在不使用标准库的情况下使用(#![no_std]
)通过禁用默认的std
特性。在Cargo.toml
中使用此特性
[dependencies.fdt-rs]
version = "0.4"
default-features = false
示例
以下示例将一个平坦设备树存储在内存中,将该设备树解析为一个 fdt_rs::DevTree
对象,搜索设备树中的"ns16550a"兼容节点,并在找到的情况下打印每个节点的名称。
extern crate fdt_rs;
use fdt_rs::prelude::*;
use fdt_rs::base::*;
// Place a device tree image into the rust binary and
// align it to a 32-byte boundary by using a wrapper struct.
#[repr(align(4))] struct _Wrapper<T>(T);
pub const FDT: &[u8] = &_Wrapper(*include_bytes!("../tests/riscv64-virt.dtb")).0;
fn main() {
// Initialize the devtree using an &[u8] array.
let devtree = unsafe {
// Get the actual size of the device tree after reading its header.
let size = DevTree::read_totalsize(FDT).unwrap();
let buf = &FDT[..size];
// Create the device tree handle
DevTree::new(buf).unwrap()
};
// Iterate through all "ns16550a" compatible nodes within the device tree.
// If found, print the name of each node (including unit address).
let mut node_iter = devtree.compatible_nodes("ns16550a");
while let Some(node) = node_iter.next().unwrap() {
println!("{}", node.name().unwrap());
}
}
还可以查看 fdtdump 的示例实现,该实现使用此库。
依赖项
~2MB
~42K SLoC