Difference between revisions of "Device tree"

[quality revision] [quality revision]
m (Build)
m (Build)
 

1 Purpose[edit]

The objective of this chapter is to give general information about the device tree.
An extract of the device tree specification[1] explains it as follows:

"A device tree is a tree data structure with nodes that describe the devices in a system. Each node has property/value pairs that describe the characteristics of the device being represented. Each node has exactly one parent except for the root node, which has no parent. ... Rather than hard coding every detail of a device into an operating system, many aspect of the hardware can be described in a data structure that is passed to the operating system at boot time."

In other words, a device tree describes the hardware that can not be located by probing.

1.1 Device tree basis[edit]

This webinar will give the foundations of device tree applied to STM32MP1 products and boards. This is highly recommended to start from this if you are beginner on this subject.

  • Device Tree for STM32MP [2]

1.2 Source files[edit]

  • .dts: The device tree source (DTS). This format is a textual representation of a device tree in a form that can be processed by DTC (Device Tree Compiler) into a binary file expected by software components: Linux® Kernel, U-Boot and TF-A.
  • .dtsi: Source files that can be included from a DTS file.
  • .h: Header files that can be included from DTS and DTSI files.

1.3 Bindings[edit]

The device tree data structures and properties are named bindings. Those bindings are described in:

1.4 Build[edit]

Device tree build process
  • A tool named DTC[3](Device Tree Compiler) allows compiling the DTS sources into a binary.
  • input file: the .dts file described in section above (that includes itself one or several .dtsi and .h files).
  • output file: the .dtb file described in section above.

DTC source code is located here[4]. DTC tool is also available directly in particular software components: Linux Kernel, U-Boot, TF-A .... For those components, the device tree building is directly integrated in the component build process.

Info white.png Information
If dts files use some defines, dts files should be preprocessed before being compiled by DTC.


1.5 Tools[edit]

The device tree compiler offers also some tools:

  • fdtdump: Print a readable version of a flattened device tree file (dtb)
  • fdtget: Read properties from a device tree
  • fdtput: Write properties to a device tree
  • ...

There are several ways to get those tools:

  • In the device tree compiler project source code[4]
  • Directly in software components: Kernel, u-boot, tf-a ...
  • Available in Debian package[5]

2 STM32[edit]

For STM32MP1, the device tree is used by three software components: Linux® kernel, U-Boot and TF-A.

The device tree is part of the OpenSTLinux distribution. It can also be generated by STM32CubeMX tool.

To have more information about the device tree usage on STM32MP1 (how the device tree source files are split, how to find the device tree source files per software components, how is STM32CubeMX generating the device tree ...) see STM32MP15 device tree page.

3 How to go further[edit]

  • Device Tree Reference[6] - eLinux.org
  • Device Tree usage[7] - eLinux.org

4 References[edit]


==Purpose==
The objective of this chapter is to give general information about the device tree.<br />

An extract of the '''device tree specification'''<ref name="dt_org">[https://github.com/devicetree-org/devicetree-specification/releases/tag/v0.2 https://github.com/devicetree-org/devicetree-specification/releases/tag/v0.2(latest)] ,Device tree specification</ref> explains it as follows:

''"A device tree is a tree data structure with nodes that describe the devices in a system. Each node has property/value pairs that describe the characteristics of the device being represented. Each node has exactly one parent except for the root node, which has no parent.''
''...''
''Rather than hard coding every detail of a device into an operating system, many aspect of the hardware can be described in a data structure that is passed to the operating system at boot time."''

In other words, a device tree describes the hardware that can not be located by probing.
===Device tree basis===
This webinar will give the foundations of device tree applied to STM32MP1 products and boards. This is highly recommended to start from this if you are beginner on this subject.
* Device Tree for STM32MP <ref>[https://www.youtube.com/watch?v=a9CZ1Uk3OYQ https://www.youtube.com/watch?v=a9CZ1Uk3OYQ], Device Tree for STM32MP</ref>


===Source files===
*'''.dts:''' The device tree source (DTS). This format is a textual representation of a device tree in a form that can be processed by DTC (Device Tree Compiler) into a binary file expected by software components: [[STM32MP15_Linux_kernel_overview|Linux<sup>&reg;</sup> Kernel]], [[U-Boot_overview|U-Boot]] and [[TF-A overview|TF-A]].
*'''.dtsi:''' Source files that can be included from a DTS file.
*'''.h:''' Header files that can be included from DTS and DTSI files.

===Bindings===
The device tree data structures and properties are named '''bindings'''. Those bindings are described in:

*The Device tree specification<ref name="dt_org"/> for generic bindings.
*The software component documentations:
**Linux<sup>&reg;</sup> Kernel: {{CodeSource | Linux kernel | Documentation/devicetree/bindings/ | Linux kernel device tree bindings}}
**U-Boot: {{CodeSource | U-Boot | doc/device-tree-bindings/ }}
**TF-A: {{CodeSource | TF-A | docs/devicetree/bindings/ | TF-A device tree bindings}}

===Build===

[[File: dt.png|thumb|upright=2|center|link=|Device tree build process]]

*A tool named DTC<ref>[https://git.kernel.org/pub/scm/utils/dtc/dtc.git/tree/Documentation/manual.txt https://git.kernel.org/pub/scm/utils/dtc/dtc.git/tree/Documentation/manual.txt(master)], DTC manual</ref>(Device Tree Compiler) allows compiling the DTS sources into a binary.
:*input file: the ''.dts'' file described in section above (that includes itself one or several .dtsi and .h files).
:*output file: the ''.dtb'' file described in section above.

DTC source code is located here<ref name="dtc_source">[https://git.kernel.org/pub/scm/utils/dtc/dtc.git https://git.kernel.org/pub/scm/utils/dtc/dtc.git(master)] ,DTC source code</ref>. DTC tool is also available directly in particular software components: '''Linux Kernel, U-Boot, TF-A ...'''. For those components, the device tree building is directly integrated in the component build process.

{{Info|If dts files use some defines, dts files should be preprocessed before being compiled by DTC.}}
<br/>


===Tools===

The device tree compiler offers also some tools:
*'''fdtdump:''' Print a readable version of a flattened device tree file (dtb)
*'''fdtget:''' Read properties from a device tree
*'''fdtput:''' Write properties to a device tree
*...

There are several ways to get those tools:

*In the device tree compiler project source code<ref name="dtc_source" />

*Directly in software components: '''Kernel, u-boot, tf-a ...'''
*Available in Debian package<ref>[https://packages.debian.org/search?keywords=device-tree-compiler https://packages.debian.org/search?keywords=device-tree-compiler(master)] ,DTC debian package</ref>


== STM32 ==
For STM32MP1, the device tree is used by three software components: [[STM32MP15 Linux kernel overview|Linux<sup>&reg;</sup> kernel]], [[U-Boot overview|U-Boot]] and [[TF-A overview|TF-A]].

The device tree is part of the [[OpenSTLinux distribution]]. It can also be generated  by [[STM32CubeMX]] tool. 

To have more information about the device tree usage on STM32MP1 (how the device tree source files are split, how to find the device tree source files per software components, how is [[STM32CubeMX]] generating the device tree ...) see [[STM32MP15 device tree]] page.

==How to go further==

* Device Tree Reference<ref>[https://elinux.org/Device_Tree_Reference Device Tree Reference], eLinux.org</ref> - eLinux.org
* Device Tree usage<ref>[https://elinux.org/Device_Tree_Usage Device Tree Usage], eLinux.org</ref> - eLinux.org

==References==<references />

<noinclude>

[[Category:Platform configuration|1]]
{{PublicationRequestId | 10390 | 2019-01-21 | AlainF}}</noinclude>
(No difference)