Why can't I compile the device tree?

When I use the Jetson Orin Nano DevKit with version 36.4.3, I want to use /ivc-echo-task.c, so I modified the file Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi. However, I don’t quite understand the following two steps:

  1. Compile the device tree and copy the dtb file to the Linux_for_Tegra/dtb/ directory.

  2. Rebuild the device tree and reflash the board by referencing the instructions in the “Building the Kernel” section of the Linux Developer Guide.

I am not sure how to compile the device tree. What should I do?

Currently, I have already installed the toolchain. However, after running the following commands:

export CROSS_COMPILE=$HOME/l4t-gcc/aarch64--glibc--stable-2022.08-1/bin/aarch64-buildroot-linux-gnu-
export KERNEL_HEADERS=$PWD/kernel/kernel-jammy-src
make dtbs

I encountered the following error:

================================================================================
make nvidia-dtbs ...
================================================================================
TEGRA_TOP=/home/rvbust/zc.you/Linux_for_Tegra/source \
srctree=/home/rvbust/zc.you/Linux_for_Tegra/source/kernel/kernel-jammy-src \
objtree=/home/rvbust/zc.you/Linux_for_Tegra/source/kernel/kernel-jammy-src \
oottree=/home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree \
HOSTCC=gcc \
make -f /home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/scripts/Makefile.build \
        obj=/home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts \
        dtbs
make[1]: Entering directory '/home/rvbust/zc.you/Linux_for_Tegra/source'
  mkdir -p /home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts//hardware/nvidia/t23x/nv-public/ ; gcc -E -Wp,-MMD,/home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts//hardware/nvidia/t23x/nv-public/.tegra234-p3737-0000+p3701-0000.dtb.d.pre.tmp -nostdinc -I/home/rvbust/zc.you/Linux_for_Tegra/source/hardware/nvidia/tegra/nv-public -I/home/rvbust/zc.you/Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public/include/kernel -I/home/rvbust/zc.you/Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public/include/nvidia-oot -I/home/rvbust/zc.you/Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public/include/platforms -I/home/rvbust/zc.you/Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public -I/home/rvbust/zc.you/Linux_for_Tegra/source/kernel/kernel-jammy-src/scripts/dtc/include-prefixes  -DLINUX_VERSION=600 -DTEGRA_HOST1X_DT_VERSION=2 -undef -D__DTS__ -x assembler-with-cpp -o /home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts//hardware/nvidia/t23x/nv-public/.tegra234-p3737-0000+p3701-0000.dtb.dts.tmp /home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts/../..//hardware/nvidia/t23x/nv-public/tegra234-p3737-0000+p3701-0000.dts ; /home/rvbust/zc.you/Linux_for_Tegra/source/kernel/kernel-jammy-src/scripts/dtc/dtc -o /home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts//hardware/nvidia/t23x/nv-public/tegra234-p3737-0000+p3701-0000.dtb -b 0 -i/home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts/../..//hardware/nvidia/t23x/nv-public/ -i/home/rvbust/zc.you/Linux_for_Tegra/source/hardware/nvidia/tegra/nv-public -i/home/rvbust/zc.you/Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public/include/kernel -i/home/rvbust/zc.you/Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public/include/nvidia-oot -i/home/rvbust/zc.you/Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public/include/platforms -i/home/rvbust/zc.you/Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public -i/home/rvbust/zc.you/Linux_for_Tegra/source/kernel/kernel-jammy-src/scripts/dtc/include-prefixes -Wno-interrupt_provider -Wno-unit_address_vs_reg -Wno-unit_address_format -Wno-avoid_unnecessary_addr_size -Wno-alias_paths -Wno-graph_child_address -Wno-simple_bus_reg -Wno-unique_unit_address   -@ -@ -@ -@ -Wno-interrupt_provider -Wno-unit_address_vs_reg -Wno-unit_address_format -Wno-avoid_unnecessary_addr_size -Wno-alias_paths -Wno-graph_child_address -Wno-simple_bus_reg -Wno-unique_unit_address   -d /home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts//hardware/nvidia/t23x/nv-public/.tegra234-p3737-0000+p3701-0000.dtb.d.dtc.tmp /home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts//hardware/nvidia/t23x/nv-public/.tegra234-p3737-0000+p3701-0000.dtb.dts.tmp ; cat /home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts//hardware/nvidia/t23x/nv-public/.tegra234-p3737-0000+p3701-0000.dtb.d.pre.tmp /home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts//hardware/nvidia/t23x/nv-public/.tegra234-p3737-0000+p3701-0000.dtb.d.dtc.tmp > /home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts//hardware/nvidia/t23x/nv-public/.tegra234-p3737-0000+p3701-0000.dtb.d
FATAL ERROR: Unrecognized check name "interrupt_provider"
make[1]: *** [/home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts/Makefile:118: /home/rvbust/zc.you/Linux_for_Tegra/source/kernel-devicetree/generic-dts//hardware/nvidia/t23x/nv-public/tegra234-p3737-0000+p3701-0000.dtb] Error 1
make[1]: Leaving directory '/home/rvbust/zc.you/Linux_for_Tegra/source'
make: *** [Makefile:173: nvidia-dtbs] Error 2

Can you build the kernel?

$ export CROSS_COMPILE=<toolchain-path>/bin/aarch64-buildroot-linux-gnu-
$ make -C kernel

The INSTALL_MOD_PATH is generated by sdkmanager by flash the device.

Did you configure first to match your running system? Or at least defconfig plus CONFIG_LOCALVERSION?

Consider that there is a lot of code in the kernel for all kinds of hardware, and all kinds of software which the Jetson won’t use. Device tree could be considered as not actually being part of the kernel, but instead as arguments or environment passed to drivers. This means that if your configuration did not exist, then probably it is trying to do things like build content for every single driver there is, along with the device tree content going with that. Do check that you can build the kernel Image target (you don’t have to use it, just verify it builds) prior to seeing if the device tree builds. If Image builds and has a configuration for your Jetson, then so too should device tree build be possible. This is highly dependent on configuration building the correct content and nothing else.

Everything is working fine now, thank you

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.