Using device tree overlays - OE4T/meta-tegra GitHub Wiki
For many L4T/Jetson Linux releases, NVIDIA has provided a mechanism (the jetson-io
scripts) for applying device tree overlays (.dtbo
files) dynamically at runtime. For OE/Yocto-based builds, device trees are built from sources, so runtime application of DTB overlays is less of an issue. The meta-tegra
layer does provide some mechanisms for applying DTB overlays, through some build-time variable settings.
Build-time application of overlays
This mechanism is supported in the branches based on L4T R32.6.x and later. Overlays are applied to the device tree during the kernel build, directly modifying your kernel DTB.
Locating overlays
The exact list of overlays supplied by NVIDIA varies by target platform. You can find them by building the kernel recipe (virtual/kernel
or linux-tegra
) and examining its output under ${BUILDDIR}/work/tmp/${MACHINE}/linux-tegra
.
Applying overlays
Set the KERNEL_DEVICETREE_APPLY_OVERLAYS
variable to a blank-separate list of .dtbo
file names to have those overlays applied during the kernel build. You can do this in your machine configuration file, or add it, for example, to the local.conf
file in your build workspace.
Example
For example, to configure a Jetson Xavier NX development kit for IMX477 and IMX219 cameras, you would add the following line to your $BUILDDIR/conf/local.conf
file:
KERNEL_DEVICETREE_APPLY_OVERLAYS:jetson-xavier-nx-devkit = "tegra194-p3668-all-p3509-0000-camera-imx477-imx219.dtbo"
Other possible use cases
For U-Boot-based Jetsons, the .dtbo
files will get populated into the /boot
directory in the rootfs, and you could modify the /boot/extlinux/extlinux.conf
file to add an FDTOVERLAY
line to have one or more overlays applied at boot time. Unfortunately, OE-Core's support for generating extlinux.conf
content does not include support for FDTOVERLAY
lines, so to make such a change you would have to work out a way to rewrite that file in a bbappend.
Runtime application of overlays
This mechanism is supported in branches based on L4T R35.x and later. Overlays are appended to the kernel DTB by the NVIDIA flashing/signing tools, and are applied by the UEFI bootloader at runtime.
Locating overlays
The exact list of overlays supplied by NVIDIA varies by target platform. You can find them on R35.x-based branches by building the kernel recipe (virtual/kernel
or linux-tegra
) and examining its output under ${BUILDDIR}/work/tmp/${MACHINE}/linux-tegra
. For R36.x-based branches, device trees are built as part of the nvidia-kernel-oot
recipe.
Applying overlays
Append your additional overlays to the TEGRA_PLUGIN_MANAGER_OVERLAYS
variable, which consists of a blank-separate list of .dtbo
file names. You can do this in your machine configuration file, or add it, for example, to the local.conf
file in your build workspace. That variable is set by the layer to include overlays that NVIDIA requires for its platforms, so be sure to append to it, rather than overwriting it.
Example
For example, to configure the pins on the 40-pin expansion header of the Jetson Orin Nano development kit, you would add the following line to your $BUILDDIR/conf/local.conf
file:
TEGRA_PLUGIN_MANAGER_OVERLAYS:append:jetson-orin-nano-devkit = " tegra234-p3767-0000+p3509-a02-hdr40.dtbo"