| .. _devicetree-scope-purpose: |
| |
| Scope and purpose |
| ***************** |
| |
| A *devicetree* is primarily a hierarchical data structure that describes |
| hardware. The `Devicetree specification`_ defines its source and binary |
| representations. |
| |
| .. _Devicetree specification: https://www.devicetree.org/ |
| |
| Zephyr uses devicetree to describe: |
| |
| - the hardware available on its :ref:`boards` |
| - that hardware's initial configuration |
| |
| As such, devicetree is both a hardware description language and a configuration |
| language for Zephyr. See :ref:`dt_vs_kconfig` for some comparisons between |
| devicetree and Zephyr's other main configuration language, Kconfig. |
| |
| There are two types of devicetree input files: *devicetree sources* and |
| *devicetree bindings*. The sources contain the devicetree itself. The bindings |
| describe its contents, including data types. The :ref:`build system |
| <build_overview>` uses devicetree sources and bindings to produce a generated C |
| header. The generated header's contents are abstracted by the ``devicetree.h`` |
| API, which you can use to get information from your devicetree. |
| |
| Here is a simplified view of the process: |
| |
| .. figure:: zephyr_dt_build_flow.png |
| :figclass: align-center |
| |
| Devicetree build flow |
| |
| All Zephyr and application source code files can include and use |
| ``devicetree.h``. This includes :ref:`device drivers <device_model_api>`, |
| :ref:`applications <application>`, :ref:`tests <testing>`, the kernel, etc. |
| |
| The API itself is based on C macros. The macro names all start with ``DT_``. In |
| general, if you see a macro that starts with ``DT_`` in a Zephyr source file, |
| it's probably a ``devicetree.h`` macro. The generated C header contains macros |
| that start with ``DT_`` as well; you might see those in compiler error |
| messages. You always can tell a generated- from a non-generated macro: |
| generated macros have some lowercased letters, while the ``devicetree.h`` macro |
| names have all capital letters. |