[PATCH] user/exe : Add Device Tree section

Nils Hölscher nilhoel1 at gmail.com
Mon Jul 22 12:52:49 UTC 2019


On Mon, 22 Jul 2019 at 14:12, Vijay Kumar Banerjee <vijaykumar9597 at gmail.com>
wrote:

>
>
>
> On Mon, Jul 22, 2019 at 5:07 PM Nils Hölscher <nilhoel1 at gmail.com> wrote:
>
>>
>>
>> On Mon, 22 Jul 2019 at 12:41, Vijay Kumar Banerjee <
>> vijaykumar9597 at gmail.com> wrote:
>>
>>> ---
>>>  user/exe/device-tree.rst | 100 +++++++++++++++++++++++++++++++++++++++
>>>  user/exe/index.rst       |   1 +
>>>  2 files changed, 101 insertions(+)
>>>  create mode 100644 user/exe/device-tree.rst
>>>
>>> diff --git a/user/exe/device-tree.rst b/user/exe/device-tree.rst
>>> new file mode 100644
>>> index 0000000..3cd52cd
>>> --- /dev/null
>>> +++ b/user/exe/device-tree.rst
>>> @@ -0,0 +1,100 @@
>>> +.. SPDX-License-Identifier: CC-BY-SA-4.0
>>> +
>>> +.. Copyright (C) 2018 Vijay Kumar Banerjee <vijaykumar9597 at gmail.com>
>>> +
>>> +Device Tree
>>> +===========
>>> +.. index:: Device Tree
>>> +
>>> +A Device Tree is a data structure that is used to describe properties of
>>> +non-discoverable hardware instead of hardcoding them on the Kernel. The
>>> device
>>> +tree data is generally stored in a `.dts` or a Device Tree Source (DTS)
>>> file.
>>> +This file is then compiled into a binary format called Device Tree Blob
>>> (DTB)
>>> +with `.dtb` extension. RTEMS preferably uses DTB built from the FreeBSD
>>> source
>>> +tree matching the libbsd HEAD commit hash.
>>> +
>>> +Building the DTB
>>> +----------------
>>> +
>>> +A single device tree source (DTS) file can be built using the `dtc`
>>> tool in
>>> +libfdt using the following command :
>>> +
>>> +.. code-block:: none
>>> +
>>> +    dtc -I dts -O dtb -o my-devicetree.dtb my-devicetree.dts
>>> +
>>> +For building the DTS from the FreeBSD source, the `make_dtb.sh` script
>>> +from `freebsd/sys/tools/fdt` must be used as most of the DTS files in
>>> FreeBSD
>>> +have included `.dtsi` files from their source tree. An example is given
>>> below as
>>> +a reference of how to build the device tree from the FreeBSD source.
>>> +
>>> +`NOTE : The following example uses FreeBSD master branch from github
>>> mirror as
>>> +an example. It is advised to always use the source from the commit
>>> matching the
>>> +libBSD HEAD.`
>>> +
>>> +.. code-block:: shell
>>> +   :linenos:
>>> +
>>> +     #We're using the script from freebsd/sys/tools/make_dtb.sh
>>> +     #Target device: Beaglebone Black.
>>> +     #Architecture: Arm.
>>> +     #DTS source name: am335x-boneblack.dts
>>> +
>>> +     #The make_dtb.sh script uses environment variable MACHINE
>>> +     export MACHINE='arm'
>>> +
>>> +     SCRIPT_DIR=$HOME/freebsd/sys/tools/fdt
>>> +
>>> +     #The arguments to the script are
>>> +     # $1 -> Build Tree
>>> +     # $2 -> DTS source file
>>> +     # $3 -> output path of the DTB file
>>> +
>>> +     ${SCRIPT_DIR}/make_dtb.sh ${SCRIPT_DIR}/../../ \
>>> +     ${SCRIPT_DIR}/../../gnu/dts/arm/am335x-boneblack.dts \
>>> +     $(pwd)
>>>
>>
>> Does this really work?
>> Cause I had to change all includes in the dts files from relative to
>> absolute paths.
>>
> The reason to use the make_dtb.sh script is that it uses the -i option
> with dtc which
> sets the include directory.
> Inside the script there are a few includes like these :
> ```
> -i "$S/dts/${MACHINE}" -i "$S/gnu/dts/${MACHINE}"
> ```
> here $S is the build tree argument. So if you use this script with the
> right path to build
> tree, i.e., the path to gnu/ directory, then the included files will be
> discoverable and
> there won't be a need to edit the includes.
> I agree that it's not intuitive that the build tree must be the path to
> gnu directory and a
> user would not like to look into every script involved to figure out what
> it does. How would
> you suggest to include this information in the doc so that it's
> understandable?
>
Yes this is truly confusing.
But I don't know if this need to be mentioned.
I just didn't know it and used a more complicated way to build my device
trees.
The whole external device tree stuff isn't optimal, I also remember a
discussion on devel about this.

>
> +
>>> +Using Device Tree Overlay
>>> +-------------------------
>>> +
>>> +Device tree overlay is used either add properties or devices to the
>>> existing
>>>
>>  Little typo: Device tree overlay is used either [*to]* add properties
>> or devices to the existing
>>
>> Thanks for the note. Will fix this in v2.
>
>> The rest looks fine to me.
>>
>> Thanks for reviewing the patch!
>
>> Best,
>> Nils
>>
>>> +device tree. Adding any property to DTS using an overlay will override
>>> the
>>> +current values in the DTB. The Overlays enable us to modify the device
>>> tree
>>> +using a small maintainable plugin without having to edit the whole Base
>>> Tree.
>>> +
>>> +There are two ways of applying an overlay on top of the built dtb.
>>> +
>>> +#. Use fdtoverlay from libfdt
>>> +
>>> +#. Add the overlay in the root partition of the SDcard and apply it
>>> using u-boot
>>> +   from the uEnv.txt file.
>>> +
>>> +The fdtoverlay command can be used as follows:
>>> +
>>> +.. code-block:: none
>>> +
>>> +    fdtoverlay -i my-base-tree.dtb -o output-tree.dtb my-overlay.dtbo
>>> +
>>> +To apply it from u-boot during system initialization we have to add the
>>> device
>>> +tree overlay file in the root directory of the SDcard and use uEnv.txt
>>> to load
>>> +and apply the overlay.
>>> +
>>> +Below is a sample script that can be used as a reference to write the
>>> uEnv.txt
>>> +properly so that it applies all the overlays (.dtbo):
>>> +
>>> +.. code-block:: shell
>>> +    :linenos:
>>> +
>>> +    overlays="fdt addr 0x88000000"
>>> +    app=rtems-app.img
>>> +    DTB_INSTALL_NAME=my-basetree.dtb
>>> +
>>> +    for f in "$(pwd)"/*.dtbo
>>> +    do
>>> +        name=`basename "${f}"`
>>> +        overlays="${overlays}; fatload mmc 0 0x88100000 ${name}; fdt
>>> resize 0x1000; fdt apply 0x88100000"
>>> +    done
>>> +    echo "setenv bootdelay 5
>>> +    uenvcmd=run boot
>>> +    boot=fatload mmc 0 0x80800000 $app ; fatload mmc 0 0x88000000
>>> ${DTB_INSTALL_NAME} ; ${overlays} ; bootm 0x80800000 - 0x88000000" >uEnv.txt
>>> +
>>> diff --git a/user/exe/index.rst b/user/exe/index.rst
>>> index 3e9b571..e22420a 100644
>>> --- a/user/exe/index.rst
>>> +++ b/user/exe/index.rst
>>> @@ -21,3 +21,4 @@ execiutable, and creating and dynamically loading code.
>>>     initialization
>>>     debugging
>>>     loader
>>> +   device-tree
>>> --
>>> 2.20.1
>>>
>>> _______________________________________________
>>> devel mailing list
>>> devel at rtems.org
>>> http://lists.rtems.org/mailman/listinfo/devel
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20190722/93118c02/attachment-0002.html>


More information about the devel mailing list