Hello, we have successfully customized our kernel for JetPack 6 and Jetson Linux 36.3 (with GadgetFS enabled and ConfigFS disabled). According to the documentation, the custom kernel should be flashed to the board. However, we are unable to flash our custom kernel successfully, though we can install it natively and it works fine.
We followed the instructions in this link to generate the following DTSI files:
pinmux.dtsi
gpio.dtsi
padvoltage.dtsi
The issue we are facing is that, even though we are able to install the kernel natively, we are not able to flash it. The documentation suggests the kernel should be flashed, but we’re unsure how to proceed. We would appreciate any suggestions on how to install or flash the kernel correctly to our custom board. For more context on this issue, you can refer to this forum post.
Thank you for your response. To clarify, “installing the kernel natively” refers to flashing the default kernel image following this guide from NVIDIA. Here’s an overview of the process we used:
After flashing and booting up the Jetson Developer Kit, we downloaded the BSP sources from this NVIDIA link.
Under /LinuxForTegra/Source, we extracted the kernel, out-of-tree modules, and NVIDIA display modules sources. Then, under /kernel/kernel_jammy_src, we configured the kernel:
make ARCH=arm64 LOCALVERSION=mod-tegra defconfig
make ARCH=arm64 LOCALVERSION=mod-tegra menuconfig
Here, we enabled gadgetfs by navigating to:
device drivers --> USB support --> USB gadget support --> Disable ConfigFS --> gadget
Compiled the Linux kernel image with:
make ARCH=arm64 LOCALVERSION=-mod-tegra -j6 Image
Compiled the loadable kernel modules:
make ARCH=arm64 LOCALVERSION=-mod-tegra -j6 modules
Installed the compiled kernel modules:
sudo make modules_install
Copied the built image from arch/arm64/boot/ to /boot/Image:
cp arch/arm64/boot/Image /boot/Image
Under Linux_for_Tegra/source/, we set the KERNEL_HEADERS environment variable:
The procedure encountering issues is detailed below:
Navigate to Linux_for_Tegra/source/kernel/kernel-jammy-src/ and execute the following commands:
make ARCH=arm64 LOCALVERSION=-davey-tegra defconfig
make ARCH=arm64 LOCALVERSION=-davey-tegra menuconfig
make ARCH=arm64 LOCALVERSION=-davey-tegra -j8 Image
make ARCH=arm64 LOCALVERSION=-davey-tegra -j8 modules
sudo make modules_install INSTALL_MOD_PATH=/Linux_for_Tegra/rootfs
Then, manually copy the Image file into:
Linux_for_Tegra/kernel/Image
Linux_for_Tegra/rootfs/boot/Image
In Linux_for_Tegra/source/, run the following:
export KERNEL_HEADERS=$PWD/kernel/kernel-jammy-src
make modules
export INSTALL_MOD_PATH=Linux_for_Tegra/rootfs
sudo -E make modules_install
In Linux_for_Tegra/, execute:
sudo ./tools/l4t_update_initrd.sh
Finally, flash the device.
I based this method on a discussion from this thread.
I haven’t tried that yet because, according to the discussion in this link, it is suggested not to use this command, as it overwrites the updated initrd image with the one provided by the current BSP package.