#device-tree #dtb #fdt #dts #metadata #dt #tree-root

bin+lib devicetree-tool

使用 Rust 编写的设备树构建和解析工具

3 个版本

0.1.2 2023 年 2 月 19 日
0.1.1 2023 年 2 月 19 日
0.1.0 2023 年 2 月 19 日

#1859解析器实现

每月 38 次下载

MIT 许可证

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