Black screen after kernel recompilation with new Jetson Linux 36.3

Hi NV team and other community members

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

  1. I flashed the kit with the new JetPack 6.0 with SDKmanager. The default kernel doesn’t have the SCTP module.
  2. 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/.
  3. 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.
  4. 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.
  5. 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.

I wonder if there is any conflict between nvidia-modest and other modules or if there is anything I missed during compilation.

Thanks!

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.

Thanks for your reply.
I put the full log of dmesg here.
dmesg.txt (87.4 KB)

If I intend only to compile and install the modules, should I go with the one located in /usr/src/.../linux-jammy/kernel-source?

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.

  1. run make -C kernel
  2. run sudo -E make install -C kernel
  3. run make modules
  4. run sudo -E make modules_install
  5. 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.

Then will it work if you build this module into the kernel image? (=y)

No, it’s still not working.
I built SCTP into the image.


But the display is still not working.
dmesg here.
dmesg.txt (72.6 KB)

I just tried and display is working fine:

nvidia@tegra-ubuntu:~$ cat /proc/config.gz | gunzip | grep CONFIG_IP_SCTP
CONFIG_IP_SCTP=m
nvidia@tegra-ubuntu:~$ lsmod | grep nvidia_modeset
nvidia_modeset 1302528 6
nvidia 1589248 13 nvidia_modeset
host1x_nvhost 40960 8 nvhost_isp5,nvhost_nvcsi_t194,nvidia,tegra_camera,nvhost_capture,nvhost_nvcsi,nvhost_vi5,nvidia_modeset
host1x 208896 5 host1x_nvhost,host1x_fence,nvgpu,tegra_drm,nvidia_modeset

Is your INSTALL_MOD_PATH set correctly?
For native compilation, it should be your root directory.

Sorry for disturbing you again, but I still cannot make it.

Here are the steps I applied.

  1. 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
  2. got back to Linux_for_Tegra/source/ and run make -C kernel
  3. run export INSTALL_MOD_PATH=/ and sudo -E make install -C kernel
  4. run export KERNEL_HEADERS=$PWD/kernel/kernel-jammy-src and make modules
  5. run sudo -E make modules_install
  6. run sudo nv-update-initrd

Still got the same errors as before.

Does the “root directory” you mentioned before mean / or /root?

Would you mind sharing your steps?

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.

I mean / on your device.

Hi Dave,
Thanks for your patience and kindness. I finally made it through cross-compiling.

1 Like

Great!
Glad you made it.

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