Grammar, typoes, font, link fixes. Signed-off-by: Robert P. J. Day <rpjday@crashcourse.ca> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
86 lines
3.2 KiB
ReStructuredText
86 lines
3.2 KiB
ReStructuredText
.. _devicetree:
|
|
|
|
Devicetree support
|
|
==================
|
|
|
|
Flattened Device Tree (FDT) is a data structure for describing the hardware on
|
|
a system. On an increasing number of boards, both barebox and the Linux kernel can
|
|
probe their devices directly from devicetrees. barebox needs the devicetree compiled
|
|
into the binary. The kernel usually does not have a devicetree compiled in; instead,
|
|
the kernel expects to be passed a devicetree from the bootloader.
|
|
|
|
From a bootloader's point of view, using devicetrees has the advantage that the
|
|
same devicetree can be used by both the bootloader and the kernel; this
|
|
drastically reduces porting effort since the devicetree has to be written only
|
|
once (and with luck somebody has already written a devicetree for the kernel).
|
|
Having barebox consult a devicetree is highly recommended for new projects.
|
|
|
|
.. _internal_devicetree:
|
|
|
|
The internal devicetree
|
|
-----------------------
|
|
|
|
The devicetree consulted by barebox plays a special role. It is referred to
|
|
as the "internal devicetree." The barebox devicetree commands work on this
|
|
devicetree. The devicetree source (DTS) files are kept in sync with the kernel DTS
|
|
files. As the FDT files are meant to be backward compatible, it should always be possible
|
|
to start a kernel with the barebox internal devicetree. However, since the barebox
|
|
devicetree may not be complete or contain bugs it is always possible to start the
|
|
kernel with a devicetree different from the one used by barebox.
|
|
If a device has been probed from the devicetree then using the :ref:`command_devinfo`
|
|
command on it will show the corresponding devicetree node:
|
|
|
|
.. code-block:: sh
|
|
|
|
barebox@Phytec pcm970:/ devinfo 10002000.wdog
|
|
Resources:
|
|
num: 0
|
|
name: /soc/aipi@10000000/wdog@10002000
|
|
start: 0x10002000
|
|
size: 0x00001000
|
|
Driver: imx-watchdog
|
|
Bus: platform
|
|
Device node: /soc/aipi@10000000/wdog@10002000
|
|
wdog@10002000 {
|
|
compatible = "fsl,imx27-wdt", "fsl,imx21-wdt";
|
|
reg = <0x10002000 0x1000>;
|
|
interrupts = <0x1b>;
|
|
clocks = <0x1 0x4a>;
|
|
};
|
|
|
|
Devicetree commands
|
|
-------------------
|
|
|
|
barebox has commands to show and manipulate devicetrees. These commands always
|
|
work on the internal devicetree. It is possible to add/remove nodes using the
|
|
:ref:`command_of_node` command and to add/change/remove properties using the
|
|
:ref:`command_of_property` command. To dump devicetrees on the console use the
|
|
:ref:`command_of_dump` command.
|
|
|
|
.. code-block:: sh
|
|
|
|
# dump the whole devicetree
|
|
of_dump
|
|
|
|
# dump node of_dump /soc/nand@d8000000/
|
|
of_dump /soc/nand@d8000000/
|
|
|
|
# create a new node
|
|
of_node -c /chosen/mynode
|
|
|
|
# add a property to it
|
|
of_property -s /chosen/mynode/ myproperty myvalue
|
|
|
|
It is important to know that these commands always work on the internal
|
|
devicetree. If you modify the internal devicetree to influence the behaviour of
|
|
a kernel booted later, make sure that you start the kernel with the internal
|
|
devicetree (i.e. don't pass a devicetree to the :ref:`command_bootm` command). If you
|
|
wish to use another devicetree than the internal devicetree for starting the kernel,
|
|
you can exchange the internal devicetree during runtime using the
|
|
:ref:`command_oftree` command:
|
|
|
|
.. code-block:: sh
|
|
|
|
oftree -f
|
|
oftree -l /new/dtb
|