3 个版本
0.1.2 | 2023 年 2 月 19 日 |
---|---|
0.1.1 | 2023 年 2 月 19 日 |
0.1.0 | 2023 年 2 月 19 日 |
#1859 在 解析器实现
每月 38 次下载
90KB
2K SLoC
devicetree-tool
使用 Rust 编写的设备树构建和解析工具
概述
该项目处于早期阶段,不应与生产工作负载一起使用。
devicetree-tool
是
- 一个可以用于操作设备树的 Rust 包
- 基于该包的命令行工具,可用于编码和解码设备树文件
devicetree-tool
的核心是设备树元数据
DeviceTree
- 设备树元数据的顶层结构Node
- 设备树中的节点,代表设备Property
- 设备节点的属性项Reservation
- 设备树的物理内存保留块
设备树元数据可以从源代码创建,也可以从 DTS 或 DTB 文件的内容构建。元数据也可以在源代码中管理,或编码为 DTS 或 DTB 格式。
devicetree-tool
包
示例
从头开始创建设备树
use devicetree_tool::Node;
use devicetree_tool::DeviceTree;
fn main() {
// Create the root node
let mut node = Node::new("");
// Add a property
node.add_property(Property::new_u32("prop", 42));
// Add a sub node
node.add_sub_node(Node::new("sub_node"));
// Create the device tree from the root node
let tree = DeviceTree::new(vec![], node);
assert_eq!(
format!("{}", tree),
"/dts-v1/;\n\n/ {\n\tprop = <0x0 0x0 0x0 0x2a>;\
\n\n\tsub_node {\n\t};\n};\n\n"
);
}
devicetree-tool
包
示例
将 DTS 文件编码为 DTB
# Build devicetree-tool
cargo build --release
# Create a simple DTS file
cat << EOF > ./temp.dts
/dts-v1/;
/ {
cpus {
#address-cells = <0x02>;
#size-cells = <0x00>;
cpu@0 {
device_type = "cpu";
compatible = "arm,arm-v8";
enable-method = "psci";
reg = <0x00 0x00>;
};
};
};
EOF
# Decode the DTS file into DTB
./target/release/devicetree-tool \
--in-type dts --in-file ./temp.dts \
--out-type dtb --out-file ./temp.dtb
依赖项
~0.4–1MB
~23K SLoC