Search by Tags

Device Tree Overlays (Linux)

 

Article updated at 25 Jan 2021
Compare with Revision




Subscribe for this article updates

Select the version of your OS from the tabs below. If you don't know the version you are using, run the command cat /etc/os-release or cat /etc/issue on the board.

BSP 5

Introduction

Warning: Device Tree Overlays were introduced in BSP 5. Therefore, this information does not apply to earlier BSPs.

Device Tree Overlays (DTO) provide a way to modify the overall device tree without re-compiling the complete device tree.

Overlays are small pieces, or fragments of a complete device tree, and can be added or removed as needed, often enabling/disabling hardware components in the system.

Because of this flexible nature, overlays provide an advantageous way of describing peripheral hardware that can be added or removed from the system. It is also useful for tweaking the parameters of existing hardware before committing it to a complete device tree.

In a very brief description, the process of designing a Device Tree Overlay comprises three macro steps:

  1. Write a Device Tree Overlay (.dts) file.
  2. Compile the .dts file to generate a .dtbo file.
  3. Enable the overlay (using the .dtbo file)

This article will explore these steps for the Toradex BSP Layers and Reference Images for Yocto Project. For information specific to Torizon, see the Device Tree Overlays on Torizon article.

Stages of Development

The development cycle of a device tree overlay, much like many other software components that you plan to integrate into your custom Yocto Project build might have three phases. You are of course free to do it differently, but here's how this article suggests:

  • Evaluation: enable pre-built overlays that are included in our Reference Images, making it possible to evaluate some hardware peripherals in a few minutes.
  • Development: for faster iteration cycles, build the overlays manually, copy them over to the device and enable them. We do provide a Makefile to ease this process.
  • Production: after you are happy with the overlays you have developed:
    • Either integrate them into your custom Yocto Project build.
    • Or integrate them into your final device tree and then integrate your final device tree into your custom Yocto Project build.

Evaluation: Pre-built Device Tree Overlays for Add-on Products Provided by Toradex

To reduce complexity and also to provide you with example implementations, Toradex provides pre-built Device Tree Overlays for the add-on products (Display and Touch Controllers) available in the webshop. Notice that only for the BSP 5.0 onwards, our reference images offer these Overlays as binaries (.dtbo files).

On a Toradex SoM with the Linux BSP > 5.0 installed, you can list these files available on the boot partition. As an example, using the the terminal of a Apalis iMX8:

$ ls /boot/overlays
display-edt5.7_overlay.dtbo    display-lt161010_overlay.dtbo
display-edt7_overlay.dtbo      display-lt170410_overlay.dtbo

To enable these overlays, see the Enable/Disable a Device Tree Overlay section. Some overlays are pre-enabled by default, refer to the Pre-enabled Device Tree Overlays section for this.

If you want to obtain the source code of the Device Tree Overlays provided by Toradex for the products available in the webshop, see the Build U-Boot and Linux Kernel from Source Code article.

Displays

See the Capacitive Touch Display 7" Parallel in the webshop.

Note: To use capacitive touch interface on Apalis Evaluation board, Colibri Evaluation board and Viola/Viola Plus v1.0-1.2 you need the Capacitive Touch Adapter.

Module Board Accessory Kernel Overlays
Apalis iMX6 Evaluation/Ixora toradex_5.4-2.1.x-imx apalis-imx6_lcd_overlay.dtbo, apalis-imx6_atmel-mxt_overlay.dtbo
Apalis iMX6 Evaluation/Ixora toradex_5.4.y apalis-imx6_parallel-rgb_overlay.dtbo, apalis-imx6_atmel-mxt_overlay.dtbo, display-edt7_overlay.dtbo
Apalis iMX8 Display is not supported by module
Apalis iMX8X Evaluation/Ixora toradex_5.4-2.1.x-imx apalis-imx8x_parallel-rgb_overlay.dtbo, apalis-imx8x_atmel-mxt_overlay.dtbo, display-edt7_overlay.dtbo
Colibri iMX6 Evaluation/Aster/Iris/Viola toradex_5.4-2.1.x-imx colibri-imx6_lcd_overlay.dtbo, colibri-imx6_atmel-mxt_overlay.dtbo
Colibri iMX6 Evaluation/Aster/Iris/Viola toradex_5.4.y colibri-imx6_parallel-rgb_overlay.dtbo, colibri-imx6_atmel-mxt_overlay.dtbo, display-edt7_overlay.dtbo
Colibri iMX6ULL Evaluation/Aster/Iris/Viola toradex_5.4-2.1.x-imx colibri-imx6ull_parallel-rgb_overlay.dtbo, colibri-imx6ull_atmel-mxt_overlay.dtbo
Colibri iMX6ULL Evaluation/Aster/Iris/Viola toradex_5.4.y colibri-imx6ull_parallel-rgb_overlay.dtbo, colibri-imx6ull_atmel-mxt_overlay.dtbo, display-edt7_overlay.dtbo
Colibri iMX7 Evaluation/Aster/Iris/Viola toradex_5.4-2.1.x-imx colibri-imx7_parallel-rgb_overlay.dtbo, colibri-imx7_atmel-mxt_overlay.dtbo
Colibri iMX7 Evaluation/Aster/Iris/Viola toradex_5.4.y colibri-imx7_parallel-rgb_overlay.dtbo, colibri-imx7_atmel-mxt_overlay.dtbo, display-edt7_overlay.dtbo
Colibri iMX8X Evaluation/Aster/Iris/Viola toradex_5.4-2.1.x-imx colibri-imx8x_parallel-rgb_overlay.dtbo, colibri-imx8x_atmel-mxt_overlay.dtbo, display-edt7_overlay.dtbo
Verdin iMX8MM Development/Dahlia Verdin DSI to RGB Adapter Display is not (yet) supported by module
Verdin iMX8MP Development/Dahlia Verdin DSI to RGB Adapter Display is not (yet) supported by module

See the Capacitive Touch Display 10.1" LVDS in the webshop.

Note: To use capacitive touch interface on Apalis Evaluation board, Colibri Evaluation board and Viola/Viola Plus v1.0-1.2 you need the Capacitive Touch Adapter.

Module Board Accessory Kernel Overlays
Apalis iMX6 Evaluation/Ixora toradex_5.4-2.1.x-imx apalis-imx6_lvds_overlay.dtbo, apalis-imx6_atmel-mxt_overlay.dtbo
Apalis iMX6 Evaluation/Ixora toradex_5.4.y apalis-imx6_lvds_overlay.dtbo, apalis-imx6_atmel-mxt_overlay.dtbo, display-lt170410_overlay.dtbo
Apalis iMX8 Evaluation/Ixora toradex_5.4-2.1.x-imx apalis-imx8_lvds_overlay.dtbo, apalis-imx8_atmel-mxt_overlay.dtbo, display-lt170410_overlay.dtbo
Apalis iMX8X Evaluation/Ixora toradex_5.4-2.1.x-imx apalis-imx8x_lvds_overlay.dtbo, apalis-imx8x_atmel-mxt_overlay.dtbo, display-lt170410_overlay.dtbo
Colibri iMX6 Iris v2.0 toradex_5.4-2.1.x-imx colibri-imx6_lcd-lvds_overlay.dtbo, colibri-imx6_atmel-mxt_overlay.dtbo
Colibri iMX6 Iris v2.0 toradex_5.4.y colibri-imx6_parallel-rgb_overlay.dtbo, colibri-imx6_atmel-mxt_overlay.dtbo, display-dpi-lt170410_overlay.dtbo
Colibri iMX6ULL Iris v2.0 toradex_5.4-2.1.x-imx colibri-imx6ull_parallel-rgb-lvds_overlay.dtbo, colibri-imx6ull_atmel-mxt_overlay.dtbo
Colibri iMX6ULL Iris v2.0 toradex_5.4.y colibri-imx6ull_parallel-rgb_overlay.dtbo, colibri-imx6ull_atmel-mxt_overlay.dtbo, display-dpi-lt170410_overlay.dtbo
Colibri iMX7 Iris v2.0 toradex_5.4-2.1.x-imx colibri-imx7_parallel-rgb-lvds_overlay.dtbo, colibri-imx7_atmel-mxt_overlay.dtbo
Colibri iMX7 Iris v2.0 toradex_5.4.y colibri-imx7_parallel-rgb_overlay.dtbo, colibri-imx7_atmel-mxt_overlay.dtbo, display-dpi-lt170410_overlay.dtbo
Colibri iMX8X Iris v2.0 toradex_5.4-2.1.x-imx colibri-imx8x_parallel-rgb_overlay.dtbo, colibri-imx8x_atmel-mxt_overlay.dtbo, display-dpi-lt170410_overlay.dtbo
Verdin iMX8MM Development/Dahlia Verdin DSI to LVDS Adapter toradex_5.4-2.1.x-imx verdin-imx8mm_sn65dsi84_overlay.dtbo
Verdin iMX8MP Development/Dahlia Verdin DSI to LVDS Adapter toradex_5.4-2.1.x-imx verdin-imx8mp_sn65dsi84_overlay.dtbo, verdin-imx8mp_sn65dsi84-lt170410_overlay.dtbo

See the Resistive Touch Display 7" Parallel in the webshop.

Module Board Accessory Kernel Overlays
Apalis iMX6 Evaluation/Ixora toradex_5.4-2.1.x-imx apalis-imx6_lcd_overlay.dtbo, apalis-imx6_stmpe-ts_overlay.dtbo
Apalis iMX6 Evaluation/Ixora toradex_5.4.y apalis-imx6_parallel-rgb_overlay.dtbo, apalis-imx6_stmpe-ts_overlay.dtbo, display-edt7_overlay.dtbo
Apalis iMX8 Display is not supported by module
Apalis iMX8X Evaluation/Ixora toradex_5.4-2.1.x-imx apalis-imx8x_parallel-rgb_overlay.dtbo, apalis-imx8x_ad7879_overlay.dtbo, display-edt7_overlay.dtbo
Colibri iMX6 Evaluation/Aster/Iris/Viola toradex_5.4-2.1.x-imx colibri-imx6_lcd_overlay.dtbo, colibri-imx6_stmpe-ts_overlay.dtbo
Colibri iMX6 Evaluation/Aster/Iris/Viola toradex_5.4.y colibri-imx6_parallel-rgb_overlay.dtbo, colibri-imx6_stmpe-ts_overlay.dtbo, display-edt7_overlay.dtbo
Colibri iMX6ULL Evaluation/Aster/Iris/Viola toradex_5.4-2.1.x-imx colibri-imx6ull_parallel-rgb_overlay.dtbo, colibri-imx6ull_ad7879_overlay.dtbo
Colibri iMX6ULL Evaluation/Aster/Iris/Viola toradex_5.4.y colibri-imx6ull_parallel-rgb_overlay.dtbo, colibri-imx6ull_ad7879_overlay.dtbo, display-edt7_overlay.dtbo
Colibri iMX7 Evaluation/Aster/Iris/Viola toradex_5.4-2.1.x-imx colibri-imx7_parallel-rgb_overlay.dtbo, colibri-imx7_ad7879_overlay.dtbo
Colibri iMX7 Evaluation/Aster/Iris/Viola toradex_5.4.y colibri-imx7_parallel-rgb_overlay.dtbo, colibri-imx7_ad7879_overlay.dtbo, display-edt7_overlay.dtbo
Colibri iMX8X Evaluation/Aster/Iris/Viola toradex_5.4-2.1.x-imx colibri-imx8x_parallel-rgb_overlay.dtbo, colibri-imx8x_ad7879_overlay.dtbo, display-edt7_overlay.dtbo
Verdin iMX8MM Development/Dahlia Verdin DSI to RGB Adapter Display is not (yet) supported by module
Verdin iMX8MP Development/Dahlia Verdin DSI to RGB Adapter Display is not (yet) supported by module

See the EDT 7.0" (EOL) in the webshop.

Module Board Accessory Kernel Overlays
Apalis iMX6 Evaluation/Ixora toradex_5.4-2.1.x-imx apalis-imx6_lcd_overlay.dtbo, apalis-imx6_stmpe-ts_overlay.dtbo
Apalis iMX6 Evaluation/Ixora toradex_5.4.y apalis-imx6_parallel-rgb_overlay.dtbo, apalis-imx6_stmpe-ts_overlay.dtbo, display-edt7_overlay.dtbo
Apalis iMX8 Display is not supported by module
Apalis iMX8X Evaluation/Ixora toradex_5.4-2.1.x-imx apalis-imx8x_parallel-rgb_overlay.dtbo, apalis-imx8x_ad7879_overlay.dtbo, display-edt7_overlay.dtbo
Colibri iMX6 Evaluation/Aster/Iris/Viola toradex_5.4-2.1.x-imx colibri-imx6_lcd_overlay.dtbo, colibri-imx6_stmpe-ts_overlay.dtbo
Colibri iMX6 Evaluation/Aster/Iris/Viola toradex_5.4.y colibri-imx6_parallel-rgb_overlay.dtbo, colibri-imx6_stmpe-ts_overlay.dtbo, display-edt7_overlay.dtbo
Colibri iMX6ULL Evaluation/Aster/Iris/Viola toradex_5.4-2.1.x-imx colibri-imx6ull_parallel-rgb_overlay.dtbo, colibri-imx6ull_ad7879_overlay.dtbo
Colibri iMX6ULL Evaluation/Aster/Iris/Viola toradex_5.4.y colibri-imx6ull_parallel-rgb_overlay.dtbo, colibri-imx6ull_ad7879_overlay.dtbo, display-edt7_overlay.dtbo
Colibri iMX7 Evaluation/Aster/Iris/Viola toradex_5.4-2.1.x-imx colibri-imx7_parallel-rgb_overlay.dtbo, colibri-imx7_ad7879_overlay.dtbo
Colibri iMX7 Evaluation/Aster/Iris/Viola toradex_5.4.y colibri-imx7_parallel-rgb_overlay.dtbo, colibri-imx7_ad7879_overlay.dtbo, display-edt7_overlay.dtbo
Colibri iMX8X Evaluation/Aster/Iris/Viola toradex_5.4-2.1.x-imx colibri-imx8x_parallel-rgb_overlay.dtbo, colibri-imx8x_ad7879_overlay.dtbo, display-edt7_overlay.dtbo
Verdin iMX8MM Development/Dahlia Verdin DSI to RGB Adapter Display is not (yet) supported by module
Verdin iMX8MP Development/Dahlia Verdin DSI to RGB Adapter Display is not (yet) supported by module

This interface is built into some of Toradex boards. Also, Toradex provides special HDMI adapters:

If the set module+board is not on this list, it doesn't support an HDMI interface.

Module Board Accessory Kernel Overlays
Apalis iMX6 Evaluation/Ixora toradex_5.4-2.1.x-imx apalis-imx6_hdmi_overlay.dtbo
Apalis iMX6 Evaluation/Ixora toradex_5.4.y apalis-imx6_hdmi_overlay.dtbo
Apalis iMX8 Evaluation/Ixora toradex_5.4-2.1.x-imx apalis-imx8_hdmi_overlay.dtbo
Apalis iMX8X Evaluation/Ixora toradex_5.4-2.1.x-imx apalis-imx8x_dsihdmi_overlay.dtbo
Colibri iMX6 Evaluation/Aster/Iris/Viola toradex_5.4-2.1.x-imx colibri-imx6_hdmi_overlay.dtbo
Colibri iMX6 Evaluation/Aster/Iris/Viola toradex_5.4.y colibri-imx6_hdmi_overlay.dtbo
Colibri iMX6ULL Interface is not supported by module
Colibri iMX7 Interface is not supported by module
Colibri iMX8X Evaluation/Iris Colibri iMX8X DSI to HDMI Adapter toradex_5.4-2.1.x-imx colibri-imx8x_dsihdmi_overlay.dtbo
Verdin iMX8MM Development/Dahlia Verdin DSI to HDMI Adapter toradex_5.4-2.1.x-imx verdin-imx8mm_lt8912_overlay.dtbo
Verdin iMX8MP Development/Dahlia toradex_5.4-2.1.x-imx verdin-imx8mp_native-hdmi_overlay.dtbo
Verdin iMX8MP Development/Dahlia Verdin DSI to HDMI Adapter toradex_5.4-2.1.x-imx verdin-imx8mp_lt8912_overlay.dtbo

This interface is built into most of Toradex boards. If the board is not on this list, it doesn't have a VGA interface.

Module Board Kernel Overlays
Apalis iMX6 Evaluation toradex_5.4-2.1.x-imx apalis-imx6_vga_overlay.dtbo
Apalis iMX6 Evaluation toradex_5.4.y apalis-imx6_vga_overlay.dtbo
Apalis iMX8 Interface is not supported by module
Apalis iMX8X Interface is not supported by module
Colibri iMX6 Evaluation/Aster/Iris toradex_5.4-2.1.x-imx colibri-imx6_vga_overlay.dtbo
Colibri iMX6 Evaluation/Aster/Iris toradex_5.4.y colibri-imx6_vga_overlay.dtbo
Colibri iMX6ULL Evaluation/Aster/Iris toradex_5.4-2.1.x-imx colibri-imx6ull_vga_overlay.dtbo
Colibri iMX6ULL Evaluation/Aster/Iris toradex_5.4.y colibri-imx6ull_vga_overlay.dtbo
Colibri iMX7 Evaluation/Aster/Iris toradex_5.4-2.1.x-imx colibri-imx7_vga_overlay.dtbo
Colibri iMX7 Evaluation/Aster/Iris toradex_5.4.y colibri-imx7_vga_overlay.dtbo
Colibri iMX8X Evaluation/Aster/Iris toradex_5.4-2.1.x-imx colibri-imx8x_vga_overlay.dtbo
Verdin iMX8MM Interface is not supported by module
Verdin iMX8MP Interface is not supported by module

Pre-enabled Device Tree Overlays

Toradex turns on a pre-set of Device Tree Overlays to support the default display interfaces and panels.

Module Kernel Overlays Supported devices
Apalis iMX6 toradex_5.4-2.1.x-imx apalis-imx6_hdmi_overlay.dtbo HDMI Display
Apalis iMX6 toradex_5.4.y apalis-imx6_hdmi_overlay.dtbo, apalis-imx6_parallel-rgb_overlay.dtbo, apalis-imx6_stmpe-ts_overlay.dtbo, display-edt7_overlay.dtbo HDMI Display, EDT 7.0" (EOL), Resistive Touch Display 7" Parallel
Apalis iMX8 toradex_5.4-2.1.x-imx apalis-imx8_hdmi_overlay.dtbo HDMI Display
Apalis iMX8X toradex_5.4-2.1.x-imx apalis-imx8x_hdmi_overlay.dtbo, apalis-imx8x_parallel-rgb_overlay.dtbo, apalis-imx8x_ad7879_overlay.dtbo, display-edt7_overlay.dtbo HDMI Display, EDT 7.0" (EOL), Resistive Touch Display 7" Parallel
Module Kernel Overlays Supported devices
Colibri iMX6 toradex_5.4-2.1.x-imx colibri-imx6_lcd_overlay.dtbo, colibri-imx6_stmpe-ts_overlay.dtbo EDT 7.0" (EOL), Resistive Touch Display 7" Parallel
Colibri iMX6 toradex_5.4.y colibri-imx6_parallel-rgb_overlay.dtbo, colibri-imx6_stmpe-ts_overlay.dtbo, display-edt7_overlay.dtbo EDT 7.0" (EOL), Resistive Touch Display 7" Parallel
Colibri iMX6ULL toradex_5.4-2.1.x-imx colibri-imx6ull_parallel-rgb_overlay.dtbo, colibri-imx6ull_ad7879_overlay.dtbo EDT 7.0" (EOL), Resistive Touch Display 7" Parallel
Colibri iMX6ULL toradex_5.4.y colibri-imx6ull_parallel-rgb_overlay.dtbo, colibri-imx6ull_ad7879_overlay.dtbo, display-edt7_overlay.dtbo EDT 7.0" (EOL), Resistive Touch Display 7" Parallel
Colibri iMX7 toradex_5.4-2.1.x-imx colibri-imx7_parallel-rgb_overlay.dtbo, colibri-imx7_ad7879_overlay.dtbo EDT 7.0" (EOL), Resistive Touch Display 7" Parallel
Colibri iMX7 toradex_5.4.y colibri-imx7_parallel-rgb_overlay.dtbo, colibri-imx7_ad7879_overlay.dtbo, display-edt7_overlay.dtbo EDT 7.0" (EOL), Resistive Touch Display 7" Parallel
Colibri iMX8X toradex_5.4-2.1.x-imx colibri-imx8x_parallel-rgb_overlay.dtbo, colibri-imx8x_ad7879_overlay.dtbo, display-edt7_overlay.dtbo EDT 7.0" (EOL), Resistive Touch Display 7" Parallel
Module Accessory Kernel Overlays Supported devices
Verdin iMX8MM Verdin DSI to HDMI Adapter toradex_5.4-2.1.x-imx verdin-imx8mm_lt8912_overlay.dtbo HDMI Display
Verdin iMX8MP toradex_5.4-2.1.x-imx verdin-imx8mm_native-hdmi_overlay.dtbo HDMI Display
Verdin iMX8MP Verdin DSI to HDMI Adapter toradex_5.4-2.1.x-imx verdin-imx8mm_lt8912_overlay.dtbo HDMI Display

Enable/Disable a Device Tree Overlay

To enable or disable applying a pre-built overlay on a Toradex SoM just add/remove it to/from the file overlays.txt located on the boot partition, and reboot the system.

For example, one wants to disable a parallel RGB interface and display on Colibri-iMX8X and enable an HDMI interface (using DSI-to-HDMI adapter). The initial overlays.txt file looks like:

# cat /boot/overlays.txt 
fdt_overlays=colibri-imx8x_parallel-rgb_overlay.dtbo colibri-imx8x_ad7879_overlay.dtbo display-edt7_overlay.dtbo

Steps to disable a parallel RGB and enable an HDMI:

  1. Open the overlays.txt file with any text editor, e.g. vi:
# vi /boot/overlays.txt 
  1. Remove overlays, that is needed for Resistive Touch Display 7" Parallel and add one for DSi-to-HDMI adapter. The file should look like:
# cat /boot/overlays.txt 
fdt_overlays=colibri-imx8x_dsihdmi_overlay.dtbo
  1. Synchronize them filesystems:
# sync
  1. Reboot the system:
# reboot

Note: In case you find yourself with a non-working kernel after applying the overlays, see the Removing a conflicting DTO section.

Note: If you want to obtain the source code of the Device Tree Overlays provided by Toradex for the products available in the webshop, see the Build U-Boot and Linux Kernel from Source Code article.

Development: Writing a Custom DTO

The most recommended way to create a new overlay is to start looking at our evaluation boards' overlays and then adapt to your project's needs. You can find those overlays in the device-tree-overlays repository.

As with normal device trees, overlays must get explicitly written for the correct kernel version. This depends on the BSP you are using from Toradex and can be checked on Build U-Boot and Linux Kernel from Source Code article.

As an example, here is the device tree overlay for parallel RGB on a Colibri iMX8X (colibri-imx8x_parallel-rgb_overlay.dts):

// Enable the parallel RGB interface on Colibri iMX8X

#include "dt-bindings/gpio/gpio.h"
#include "dt-bindings/pinctrl/pads-imx8qxp.h"
#include "dt-bindings/pwm/pwm.h"

/dts-v1/;
/plugin/;
/ {
    compatible = "toradex,colibri-imx8x";
};

&adma_pwm {
        status = "okay";
};

&backlight {
        brightness-levels = <0 45 63 88 119 158 203 255>;
        default-brightness-level = <4>;
        power-supply = <&reg_3v3>;
        pwms = <&adma_pwm 0 6666667 PWM_POLARITY_INVERTED>;
        status = "okay";
};

&display_lcdif {
        status = "okay";

        #address-cells = <1>;
        #size-cells = <0>;

        port@1 {
                reg = <1>;

                lcd_display_out: endpoint {
                        remote-endpoint = <&lcd_panel_in>;
                };
        };
};

&panel_dpi {
        status = "okay";

        port {
                lcd_panel_in: endpoint {
                        remote-endpoint = <&lcd_display_out>;
                };
        };
};

This overlay, if loaded, is directly appended to imx8qxp-colibri-eval-v3.dts. This device tree, however, includes the "System on Module Level" device tree imx8qxp-colibri.dtsi which contains most of the device tree nodes.

If the overlay gets loaded, it gets integrated into the already loaded device tree. To add or overwrite properties can be achieved with the ampersand character the same way as described in section Overwriting_properties.

Devicetree overlays have to be denoted with /plugin/; in the header.

For further reading on this topic, we refer to the kernel documentation: https://www.kernel.org/doc/html/latest/devicetree/overlay-notes.html?highlight=overlays

Building a DTO

To build the Device Tree Overlay, see the Build U-Boot and Linux Kernel from Source Code article.

Deploying a Device Tree Overlay

To deploy a custom overlay on a Toradex SoM with the Linux BSP > 5.0 installed:

  • copy the .dtbo file to the overlays/ directory in the boot partition;
  • add the overlay binary .dtbo to the overlays.txt file. This file contains a space separated list of overlays. For example:
$ cat /boot/overlays.txt 
fdt_overlays=verdin-imx8mm_lt8912_overlay.dtbo verdin-imx8mm_ov5640_overlay.dtbo

After changing the overlays.txt, run the command sync and reboot the board. Do not power-cycle because the edits done may not sync to the file system.

Note: In case you find yourself with a non-working kernel after applying the overlay, see the Removing a conflicting DTO section

Removing a conflicting DTO

In case you find yourself with a non-working kernel (normally, stuck at the "Loading kernel..." message), you can delete your custom overlays easily directly from your PC. You would need to set up a USB-OTG connection with your PC and run the UMS functionality of U-Boot by simply stopping the autoboot at U-boot and running the following commands:

ums 0 mmc 0

After this command, you should see a BOOT partition show up on your PC. Delete the conflicting .dtbo and the corresponding item in the overlays.txt file.

Note: Check your carrier board datasheet what ports and jumper configurations work with USB-OTG. With Toradex carrier boards, it requires using the correct port or a small jumper removal (like Ixora's JP2).

Production: Add Your Overlays to a Custom Yocto Project Build

It is expected that you have some knowledge of Yocto Project/OpenEmbedded. The minimum prerequisite is being able to Build a Reference Image with Yocto Project.

If you decide to integrate your final changes into full device trees, read the article Custom meta layers, recipes and images in Yocto Project (hello-world examples).

If you decide to deploy the overlays, two steps are required and explained below:

  • Add your overlays, making sure they are compiled and deployed to the image.
  • Have the overlays listed in overlays.txt, making sure they are enabled.

Add Your Overlays to the Yocto Project

There are currently two recipes that handle device tree overlays:

You can, for instance, write your own bbappends to add your device tree overlays repository instead of ours.

Enable Your Overlays in the Yocto Project

The class meta-toradex-bsp-common/classes/image_type_tezi.bbclass is responsible for adding overlays that will be applied during boot time. It uses the variable TEZI_EXTERNAL_KERNEL_DEVICETREE_BOOT that is set by default in our machine configuration files, either machine.conf or machine.inc.

You can find them using e.g. grep inside the layers directory:

$ cd <yocto projet setup>
$ grep -nre "TEZI_EXTERNAL_KERNEL_DEVICETREE_BOOT" layers/*

Then you need to either append to or override the variable. One possibility is to use a <machine>-extra.conf file. You can find an example on Custom meta layers, recipes and images in Yocto Project (hello-world examples).