NX DevKit lost graphic desktop after flashing with kernel build

Hi, I upgraded JetPack 4.6 to 4.6.1. I rebuilt the kernel Image and dtb files with the kernel source (kernel_src.tbz2), I did not change anything for the build (as usual, I check the base/standard code before patch the kernel). after flashing, the graphic desktop, connected to a HDMI port, does not show. The console log shows "Failed to start many lines of “disagrees about version of symbol module_layout”. systemd shows “Failed to start nvpmodel service”. uname-a shows the kernel is 4.9.253-tegra which matches the module directory at /lib/modules/. The console log ans syslog are attached. Any help is greatly appreciated.
putty.log-module_version (13.9 KB)
syslog (10.3 MB)

P.S. just tried the same kernel image, flashing with JetPack 4.6 does not have this proble.

Did you recompile all modules? I’m thinking something is different between this kernel and the one the modules compiled against previously (assuming the modules are not all new).

Yes, I recompiled and reinstalled the kernel modules into the rootfs.

I guess you also hit similar error when you tried to modprobe any driver and your lsmod is still empty, right?

And some of your bootloader log has been removed. Why did you do that?

In the bootloader I skipped the device selection and 5 sec delay to speed up the boot process. I have been doing this for other previous L4T releases in CBoot.

I will try the lsmod late. Thanks.

lsmod is empty.

I also did modprobe lcd, and generic_bl. Got exec format error.

You should review how you build those modules and follow the steps from our developer guide.

Make sure the kernel in use on the board is really something you built from the 4.6.1 open source. I mean maybe the kernel running on the board is not the one you build from jp4.6.1 and you didn’t notice.

I verified the kernel is the one I just built. uname -a shows the right version. And I see the same 4.9.3-tegra in /lib/modules.
BTW, should the directory name 4.9.3-tegra be linux-4.9.3-tegra? I will check the other system which flash with JetPack4.6 and does have the problem. The directory name looks weird.

We don’t have any kernel version with “4.9.3”.

I mean the directory holding the modules should be “linux-4.9.3-tegra” or just “4.9.3-tegra”?

just same as your uname -r result.

If it should match the uname -r result, the directory name could be wrong. I can do a quick test tomorrow and get back to you.

I checked the system, uname -r returns “4.9.253-tegra”, which matches the directory name “/lib/modules/4.9.253-tegra”. I was wrong, the directory name is not the cause.
For now I just use JetPack4.6 to flash as a workaround.


Maybe you should follow the step in document first.

uname -r matching the folder name does not mean the modules can load up without problem.

As our previous comment said, your issue is more like the kernel does not match the module. But not it cannot “find” module.

Also, old and new jetpack both share 4.9.253 kerenl version. So you need to make sure something else is also matching. That is why I asked whether the kernel in use is really the one you built out.

That’s the problem. Your modules were cross compiled? They ended up for the wrong architecture. Any exec format error says the architecture is wrong.

Note: If you natively compile, don’t set the ARCH. If you cross compile, then you must set ARCH and cross tools.

The kernel is cross-compiled. ARCH=arm64. This same kernel image works fine with flash in JetPack4.6 installation.


Why not you just told us how you built those kernel and those modules? Also, how you flash those new files to the board?

We want to believe what you said but the log you shared gave out different result.

Your comment also has contradicts and I am not sure what you are trying to say.

For example,

The kernel is cross-compiled. ARCH=arm64. This same kernel image works fine with flash in JetPack4.6 installation.

I am not sure why it is “same image”. JP4.6 and JP4.6.1 are just different kernel image.

Please understand that “kernel”, “kernel modules” and “dtb” are a set. If you change one of them, then you need to upgrade all these 3.

@WayneWWW sorry for the confusion.
I downloaded the public_sources.tb2 from L4T 32.6.1 release page (Jetson Linux R32.6.1 Release Page | NVIDIA Developer). I used the kernel_src.tb2 inside the package as the kernel source. I build and install the “kernel set” with following steps ($CROSS_COMPILE and $LOCALVERSION are define in my shell environment):

  1. cd source/kernel/kernel-4.9/
  2. make ARCH=arm64 O=$kernel_build_directory tegra_defconfig
  3. make ARCH=arm64 O=$kernel_build_directory -j6
  4. make ARCH=arm64 O=$kernel_build_directory modules_install INSTALL_MOD_PATH=<the rootfs of JetPack4.6.1/Linux_4_Tegra>
  5. copy $kernel_build_directory/arch/arm64/boot/Image to JetPack4.6.1_NX_DevKit_Target/Linux_4_Tegra/kernel/
  6. copy $kernel_build_directory/arch/arm64/boot/dts/* to JetPack4.6.1_NX_DevKit_Target/Linux_4_Tegra/kernel/dtb/
  7. cd JetPack4.6.1_NX_DevKit_Target/Linux_4_Tegra/
  8. sudo ./flash.sh jetson-xavier-nx-devkit mmcblk0p1
    after reboot, I don’t have the graphic desktop.

I still have the JetPack4.6_NX_Devkit_target/Linux_4_Tegra on my host (an Ubuntu 18.0.4). I repeated the steps 4-8 under JetPack4.6_NX_DevKit_Target/Linux_4_Tegra/. The target can bootup with graphic desktop.

I hope that I state the process without confusion this time and thanks for your time.