I’m working on Jetson AGX Orin (32G) kit and recompiling the kernel (the newest Jetson Linux 36.3 from JetPack 6.0). But nvidia-modest.ko doesn’t work after installing the new kernel and some extra in-tree (SCTP) modules.
I tried the following steps, all natively done on Jetson AGX Orin Kit
I flashed the kit with the new JetPack 6.0 with SDKmanager. The default kernel doesn’t have the SCTP module.
I downloaded the new BSP files from the Jetpack 6.0 site and got source code./source_sync.sh -k -t jetson_36.3. And I made slight changes to defconfig to add SCTP support with make menuconfig and make savedefconfig, and the modified defconfig is moved to arch/arm64/configs/.
I used the provided script ./nvbuild.sh -o DIR to compile the kernel and then ./nvbuild.sh -i -o DIRto install the new Image and kernel modules, including the OOT Nvidia modules.
Then, I rebooted but got a black screen, but I can login with SSH. I check dmesg, it shows several nvidia_modeset: Unknown symbol load errors. But other Nvidia modules are loaded and working well (maybe, I can run nvidia-smi and get the output). The SCTP module is also enabled and loaded.
I restore the original defconfig and follow Step 3 to re-re-compile and install. After rebooting, I got the display and all GUI back.
I compared the two config files; the only difference was the SCTP-related CONFIG.
Put the full log here, please.
I think if you enable some kernel drivers as standalone modules (=m),
and there are other changes to the kernel image (=y), then you can just install only new modules instead of all kernel stuff.
I feel like you did not handle well with OOT modules. They are just built but not installed.
Actually our document for JetPack 6 does not use nvbuild.sh anymore.
We have a new Makefile handling this.
It’s a in-tree module so you still need the complete kernel source.
Hi Dave,
Thanks for your guidance.
I followed the Jetpack guide to build the kernel with modified defconfig but still got something wrong.
I build the kernel natively on Jetson AGX Orin kit, with the steps in documentation and just ignoring the ENV settings for cross-compile. All in Linux_for_Tegra/source folder.
run make -C kernel
run sudo -E make install -C kernel
run make modules
run sudo -E make modules_install
run sudo nv-update-initrd
Then I rebooted, and there was no display output after the boot messages. Here is the full dmesg log. dmesg.txt (72.7 KB)
P.S.: After getting the black screen, I restored the original defconfig and re-run the above steps. (also to verify the above steps) and the display works well.
Sorry for disturbing you again, but I still cannot make it.
Here are the steps I applied.
run make menuconfig and make savedefconfig in Linux_for_Tegra/source/kernel/kernel-jammy-src/ to get the modified defconfig, and move it to arch/arm64/configs/ folder
got back to Linux_for_Tegra/source/ and run make -C kernel
run export INSTALL_MOD_PATH=/ and sudo -E make install -C kernel
run export KERNEL_HEADERS=$PWD/kernel/kernel-jammy-src and make modules
run sudo -E make modules_install
run sudo nv-update-initrd
Still got the same errors as before.
Does the “root directory” you mentioned before mean / or /root?
I was cross-compiling on my host PC, but native compilation should also do it.
Maybe you can change the kernel suffix string (LOCALVERSION=...) to make sure all the kernel image and modules do take effect.
I did:
Under Linux_for_Tegra/source/kernel/kernel-jammy-src/:
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
(Manually copy Image into Linux_for_Tegra/kernel/Image and Linux_for_Tegra/rootfs/boot/Image)
Under Linux_for_Tegra/source/:
export KERNEL_HEADERS=$PWD/kernel/kernel-jammy-src
make modules
export INSTALL_MOD_PATH=Linux_for_Tegra/rootfs
sudo -E make modules_install
Under Linux_for_Tegra/:
sudo ./tools/l4t_update_initrd.sh
Then flash the device.