From 7c89bd6d5fe9e511a0bb684dbe34733d7f8e5a7f Mon Sep 17 00:00:00 2001 From: Vijay Kumar Banerjee Date: Sun, 4 Aug 2019 02:00:57 +0530 Subject: user/exe: Add Device Tree section --- user/bsps/arm/beagle.rst | 21 ++--------- user/exe/device-tree.rst | 92 ++++++++++++++++++++++++++++++++++++++++++++++++ user/exe/index.rst | 1 + 3 files changed, 95 insertions(+), 19 deletions(-) create mode 100644 user/exe/device-tree.rst diff --git a/user/bsps/arm/beagle.rst b/user/bsps/arm/beagle.rst index eb4ecfb..fa7fa05 100644 --- a/user/bsps/arm/beagle.rst +++ b/user/bsps/arm/beagle.rst @@ -40,25 +40,8 @@ from the libbsd HEAD of freebsd-org. For example if the HEAD is at Then the right Device Tree Source (DTS) file is: https://github.com/freebsd/freebsd/blob/19a6ceb89dbacf74697d493e48c388767126d418/sys/gnu/dts/arm/am335x-boneblack.dts -.. code-block:: shell - :linenos: - - #building the dtb - #We will use the script from https://github.com/freebsd/freebsd/blob/19a6ceb89dbacf74697d493e48c388767126d418/sys/tools/fdt/make_dtb.sh - - #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) +Please refer to the :ref:`device-tree` to know more about building and applying +the Device Trees. Writing the uEnv.txt file ------------------------- diff --git a/user/exe/device-tree.rst b/user/exe/device-tree.rst new file mode 100644 index 0000000..bd21552 --- /dev/null +++ b/user/exe/device-tree.rst @@ -0,0 +1,92 @@ +.. SPDX-License-Identifier: CC-BY-SA-4.0 + +.. Copyright (C) 2019 Vijay Kumar Banerjee + +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 in 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 a DTB built from the FreeBSD source +tree matching the freebsd-org HEAD commit hash in libBSD. + +Building the DTB +---------------- + +A single DTB 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 DTB 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 for 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 +freebsd-org HEAD in libBSD.` + +.. 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 (This is the path to freebsd/sys/ directory) + # $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) + +Using Device Tree Overlay +------------------------- + +Device tree overlay is used either to add properties or devices to the existing +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 SD card and apply it using U-Boot + +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 SD card and use U-Boot commands +to apply the overlay. + +Below is given the series of U-Boot commands that can be used to apply the +overlay, given that the overlay blob (.dtbo) file is already in the card. + +.. code-block:: shell + + fatload mmc 0:1 0x80800000 rtems-app.img + fatload mmc 0:1 0x88000000 my-base-tree.dtb + fdt addr 0x88000000 + fatload mmc 0:1 0x88100000 my-overlay.dtbo + fdt resize 0x1000 + fdt apply 0x88100000 + bootm 0x80800000-0x88000000 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 -- cgit v1.2.3