用于解析Devicetree源v1的库

pydevicetree的Python项目详细描述


pydevicetree公司

这是一个python3库,用于解析、查询和修改Devicetree源v1文件 在Devicetree Specification v0.2中描述。在

安装

pydevicetree支持Python>;=3.5,可以使用Python Package Index中的pip安装。在

pip install pydevicetree

教程

设备树

假设你有档案设计.dts带着里面的东西

/dts-v1/;

/ {
	#address-cells = <1>;
	#size-cells = <1>;
	compatible = "my,design";
	aliases {
		serial0 = "/soc/uart@10000000";
	};
	chosen {
		stdout-path = "/soc/uart@10000000:115200";
	};
	cpus {
		#address-cells = <1>;
		#size-cells = <0>;
		cpu@0 {
			compatible = "sifive,rocket0", "riscv";
			device_type = "cpu";
			reg = <0>;
			riscv,isa = "rv32imac";
			status = "okay";
			timebase-frequency = <1000000>;
			sifive,dtim = <&dtim>;
			interrupt-controller {
				#interrupt-cells = <1>;
				compatible = "riscv,cpu-intc";
				interrupt-controller;
			};
		};
	};
	soc {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "my,design-soc";
		ranges;
		dtim: dtim@20000000 {
			compatible = "sifive,dtim0";
			reg = <0x20000000 0x10000000>;
			reg-names = "mem";
		};
		uart: uart@10000000 {
			compatible = "sifive,uart0";
			reg = <0x10000000 0x1000>;
			reg-names = "control";
		};
	};
};

解析树

解析树很容易,1,2。。。在

^{pr2}$

查询树

compatible字符串

>>> tree.match("sifive,rocket0")
[<Node cpu>]

按路径

>>> tree.get_by_path("/soc/dtim")
<Node dtim@20000000>

路径中允许设备树别名

>>> tree.get_by_path("serial0")
<Node uart@10000000>

获取Node属性

属性的值(或列表/数组的第一个值)可以用Node.get_field()来检索

>>> tree.match("sifive,rocket0")[0].get_field("timebase-frequency")
1000000

可以使用Node.get_fields()检索分配给属性的值列表或数组

>>> tree.match("sifive,rocket0")[0].get_fields("compatible")
<StringList ['sifive,rocket0', 'riscv']>

对于regranges,有帮助器方法Node.get_reg()和{} Devicetree属性。在

>>> tree.get_by_path("/soc/dtim").get_reg()
<RegArray [536870912, 268435456]>
>>> tree.get_by_path("/soc/dtim").get_reg().get_by_name("mem")
(536870912, 268435456)
>>> "0x%x" % tree.get_by_path("/soc/dtim").get_reg().get_by_name("mem")[0]
'0x20000000'

获取chosen属性

Devicetree.chosen()提供对chosen节点属性的快速访问

>>> tree.chosen("stdout-path")
<StringList ['/soc/uart@10000000:115200']>

转换回Devicetree

任何树或子树都可以通过调用Node.to_dts()或简单地转换回Devicetree 通过print操作:

>>> print(tree.match("sifive,rocket0")[0])
cpu@0 {
        #size-cells = <0>;
        compatible = "sifive,rocket0", "riscv";
        device_type = "cpu";
        reg = <0x0>;
        riscv,isa = "rv32imac";
        status = "okay";
        timebase-frequency = <1000000>;
        sifive,dtim = <&dtim>;
        interrupt-controller {
                #interrupt-cells = <1>;
                compatible = "riscv,cpu-intc";
                interrupt-controller;
        };
};

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java中两个ArrayList的内部联接   java如何制作按钮侦听器组方法?   Java位表示法中的字节、字符和int   java如何测试控制台输出代码?   JAXB在编组java时将xmlns添加到元素中   java 安卓 Web服务调用问题   java从按钮中选择多个正确答案   java如何获取sensu服务器事件数据   java如何在编写时添加分隔符。使用openCSV的csv文件   在fedora 23上通过jnlp运行jenkins slave的java问题   如何从java web应用程序创建http可见文件?   java如何在安卓中通过编程改变矢量绘图的颜色   java为什么我总是得到未初始化的变量x?   无法从java/Android Studio中的网站获取数据   ArrayList实现在Java中的最低级别是如何工作的?   java告诉SAX解析器忽略无效字符?   java无法使用JarSplice创建可运行的LWJGL jar   java解析一个包含许多字段的json对象   用于Command+T的java JavaFX密钥组合(新选项卡)   java StreamAPI收集器。groupingBy空集合而不是null