Skip to main content

pydevicetree

This is a Python 3 library for parsing, querying, and modifying Devicetree Source v1 files as described in the Devicetree Specification v0.2.

Install

pydevicetree supports Python >= 3.5 and can be installed with pip from the Python Package Index.

pip install pydevicetree

Tutorial

The Devicetree

Let's say you have a file design.dts with the contents

/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";
		};
	};
};

Parsing the Tree

Parsing the tree is as easy as 1, 2...

>>> from pydevicetree import Devicetree
>>> tree = Devicetree.parseFile("design.dts")
>>> tree
<Devicetree my,design>

Querying the Tree

By compatible string

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

By path

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

Devicetree aliases are allowed in paths

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

Getting Node properties

The value (or first value of a list/array) of a property can be retrieved with Node.get_field()

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

The list or array of values assigned to a property can be retrieved with Node.get_fields()

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

There are helper methods Node.get_reg() and Node.get_ranges() for the reg and ranges Devicetree properties.

>>> 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'

Getting chosen properties

Devicetree.chosen() provides quick access to the properties of the chosen node

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

Converting back to Devicetree

Any tree or subtree can be converted back to Devicetree by calling Node.to_dts() or simply by printing it:

>>> 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;
        };
};

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pydevicetree-0.0.7.tar.gz (21.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pydevicetree-0.0.7-py3-none-any.whl (26.1 kB view details)

Uploaded Python 3

File details

Details for the file pydevicetree-0.0.7.tar.gz.

File metadata

  • Download URL: pydevicetree-0.0.7.tar.gz
  • Upload date:
  • Size: 21.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.1 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.7.1

File hashes

Hashes for pydevicetree-0.0.7.tar.gz
Algorithm Hash digest
SHA256 c5c3e401994a4e1a583547d9015aeda014c6022f55202b413c2de936a035a20b
MD5 ad88ea8977ff29b868e7bd8c06c0c76a
BLAKE2b-256 bca47fbec350a005299583dd48043c713baddaf2092c5fcfc4f5344fbc35e55e

See more details on using hashes here.

File details

Details for the file pydevicetree-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: pydevicetree-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 26.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.1 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.7.1

File hashes

Hashes for pydevicetree-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 56028a59e99087ed8b1afe48c09f75095a0ff4724f16039d1ba818b55f94482a
MD5 c79fcf9af3663380f4e65af435a90bd3
BLAKE2b-256 5478bcd42fd51a2489e1ef61a8aebcea90e21890f3f9aaac34d64c25eee66cde

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page