The setup
- Orin NX nano based custom board and modified kernel (slightly modified pinmux, no EEPROM)
- Flashing using
Jetson_Linux_R36.4.3 - Custom UEFI (cloned with
edk2_docker edkrepo clone nvidia-uefi NVIDIA-Platforms r36.4.3and modified. Disabled shell and some minor stuff) - Flashing with command
./tools/kernel_flash/l4t_initrd_flash.sh
–external-device nvme0n1p1
-c tools/kernel_flash/flash_l4t_t234_nvme.xml
-p “-c bootloader/generic/cfg/flash_t234_qspi.xml”
–showlogs
–network usb0
jetson-orin-custom internal
I already have a working setup workspace with a slightly older L4T version. However, there are no instructions/documentation on all the modifications that were done to this to get it to work. And I am very new to this process.
The working setup works fine. It has an already built UEFI image and already built kernel.
Problem
My build succeeds and I can flash. However it hangs after a point, looks like in between UEFI and EFI. Here’s where the logs differ (green is the good boot log)
Enter to continue boot.
-......L4TLauncher: Attempting Direct Boot
+L4TLauncher: Attempting Direct Boot
EFI stub: Booting Linux Kernel...
EFI stub: Using DTB from configuration table
EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device path
@@ -9,9 +9,10 @@
I/TC: Dynamic shared memory is enabled
I/TC: Normal World virtualization support is disabled
I/TC: Asynchronous notifications are disabled
-��TCU debug prints will be routed to traces.
-��Starting RmBootstrap
-Registered event_type:[0] for dce_core_ipc_type:[1]
-Registered event_type:[1] for dce_core_ipc_type:[3]
-dce_ipc State Initialized
-RmBootstrap completed successfully <<<========== bootup hangs here
+��[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd421]
+Linux version 5.15.148-tegra (user@laptop) (aarch64-buildroot-linux-gnu-gcc.br_real (Buildroot 2022.08) 11.3.0, GNU ld (GNU Binutils) 2.38) #2 SMP PREEMPT Tue Jun 17 13:51:07 CEST 2025 ()
+Machine model: NVIDIA Jetson Orin NX Engineering Reference Developer Kit
+efi: EFI v2.70 by EDK II
+efi: RTPROP=0x26de4e698 TPMFinalLog=0x25ea10000 SMBIOS=0xffff0000 SMBIOS 3.0=0x26da70000 MEMATTR=0x267a90018 ESRT=0x267a8ff98 TPMEventLog=0x25ea29018 RNG=0x25ea28018 MEMRESERVE=0x25ea2bc18
+random: crng init done
+secureboot: Secure boot disabled
...<<<============= bootup continues
Here’s some stuff I tried, but still getting stuck at the same place in the debug log on bootup.
- good uefi + my kernel build does not work (simply copied
bootloader/uefi_jetson.binand reflashed) - good
kernel/Image+ my build does not work (copied the file, did not rebuild)
Here are the differences/similarities I see in the two L4T directories
- Same
kernel/dtb/L4TConfiguration.dts - My
rootfs/is 6.6G while the good one’s is 7.6G jetson-orin-custom.conffile with only minor changes inPINMUX_CONFIGfile
Something very weird I noticed is that sudo du -sh rootfs/usr/lib/aarch64-linux-gnu/dri/* in my workspace shows me only armada-drm_dri.so while in the good one it contains 43 .so files in total. This is the biggest cause for the size difference it seems. However ls -l rootfs/usr/lib/aarch64-linux-gnu/dri/* in there do show the correct files with names, and they all are exactly the same to the files in the working L4T.
Is the problem in UEFI? Or how do I find out where it is?
Also is my build order correct (see TL;DR)? extract sources → do changes → build kernel → update UEFI binary (separately built).
goodlog.txt (53.7 KB)
badlog.txt (33.2 KB)
TL;DR
Here’s how I extract everything
tar xf "${L4T_RELEASE_PACKAGE}"
sudo tar xpf "${SAMPLE_FS_PACKAGE}" -C Linux_for_Tegra/rootfs/
cd Linux_for_Tegra/
sudo ./tools/l4t_flash_prerequisites.sh
sudo ./apply_binaries.sh
cd ..
tar xf "${PUBLIC_SOURCES}"
cd "${L4T_DIR}/source"
tar xf kernel_src.tbz2
tar xf kernel_oot_modules_src.tbz2
tar xf nvidia_kernel_display_driver_source.tbz2
Then I do the changes in the files I need (add custom config and pinmux files, update defconfig, set cvb_eeprom_read_size = 0 and some other minor changes on some dtsi files)
Then I build the kernel.
cd "$L4T_DIR/source"
local kernel_dir="kernel/kernel-jammy-src/"
local build_dir="$L4T_DIR/build"
local kernel_modules_dir="$L4T_DIR/kernel_modules"
make -C kernel LOCALVERSION=-tegra -j$(nproc)
export INSTALL_MOD_PATH="$L4T_DIR/rootfs"
sudo -E make install -C kernel LOCALVERSION=-tegra -j$(nproc)
cp "$kernel_dir/arch/arm64/boot/Image" "$L4T_DIR/kernel/Image"
export KERNEL_HEADERS="$PWD/$kernel_dir"
make modules LOCALVERSION=-tegra -j$(nproc)
sudo -E make modules_install LOCALVERSION=-tegra -j$(nproc)
cd "$L4T_DIR"
sudo ./tools/l4t_update_initrd.sh
cd "$L4T_DIR/source"
make dtbs LOCALVERSION=-tegra -j$(nproc)
cp kernel-devicetree/generic-dts/dtbs/* ../kernel/dtb/
Then I copy the cutom UEFI binary into bootloader/uefi_jetson.bin
