Jetson AGX Orin Devkit USB-C not connecting to PC with custom kernel

I followed the tutorial provided here: Kernel Customization — Jetson Linux<br/>Developer Guide 34.1 documentation to build the kernel from source for jetson 35.3.1. The only change I made to the kernel was to set the CONFIG_LOCALVERSION to “-custom”. I was able to build and run the flash script successfully. When the orin booted up, there was no display. I connected the micro-b cable to the debug port and was able to run through the initial oem config. I was able to get a display out after I changed the directory in /usr/lib/modules from the default “5.10.104-tegra” to my custom “5.10.104-custom-tegra”. After I rebooted the display now works.

However, I still need to be able to communicate with the board over USB-C to a PC. The device is not showing as connected in device manager and I can not connect to the orin over serial using putty.

Perhaps there is some other folder or file I need to change the kernel name of to fix this like I did for the display drivers?

Sorry for the late response, have you managed to get issue resolved or still need the support? Thanks

Hi,

so do you mean you cannot login at 192.168.55.1?
Then would it work normally with the default kernel and BSP?

I am unable to connect via the serial USB-C. There doesn’t seem to be any signal coming from the Orin. This works with the default kernel and BSP, but for our use case we need a custom kernel and to connect with USB. Logging in over ethernet works as expected.

Hi,

then are you able to login via UART with the micro USB port?
We need to know what modification you made to the kernel.

Yes, UART debug works.

Only modification made to the kernel was to change the local version name.

Hi,

I don’t think this would be enough.
The kernel modules are by default compiled with 5.10.104-tegra, but not 5.10.104-custom-tegra, so they may not be loaded correctly upon boot.

Please run this command under the kernel-5.10 folder and flash the device again.

sudo make ARCH=arm64 O=$TEGRA_KERNEL_OUT modules_install INSTALL_MOD_PATH=<top>/Linux_for_Tegra/rootfs/

That seems to compile the modules with the correct name, but how can I flash the device without having a USB-C connection working? I tried using the UART debug, but the flash script does not seem to recognize it.

What do you mean with this?
If it’s really about wrong kernel modules, then it should not affect flashing because you don’t even boot into the kernel during flashing.

Your issue is type C cannot work after kernel. Not related to recovery mode.
Recovery mode is a pure hardware event. It does not care about what kernel running on your board.

Kernel is only there when you have OS running up. But recovery mode does not have OS at all.

Thus, If your hardware is correct, recovery mode will always work.

You are correct, it turned out to be a hardware issue. I was able to connect and flash the new rootfs, and USB-C and display drivers are now functioning correctly. I am marking the previous answer as correct. Thanks.

After you recompile kernel, check “lsmod” command on your jetson and compare the result with previous “working” one.

Not every kernel drivers are built inside kernel image.

After comparing the lsmod output, it seems the only difference between the custom kernel build and another orin I have using the default kernel are the modules:

nvidia
nvidia_modeset

I also noticed that the display does not actually work after the initial boot. Perhaps it is an issue with these drivers? If so how can I add them?

Those 2 are related to display but not related to USB.

I would suggest focusing on usb issue on this topic first. For something else, you can file new topic.

Does the USB issue still exist or not?

As I said, USB issue was fixed after running the modules_install command which is why I marked it as correct.

This created an issue with the display drivers, and it appears the display no longer works after boot.

I suspect this issue is related to the same custom kernel flashing process that initially caused the USB to not work, which is why I continued this topic.

I would like a fully functioning device with a custom kernel name, not to replace one issue with another.

The display modules are installed separately because they are not in the same source code tarball.

Thus, you need to build them from separately tarball first.

Check this:
https://docs.nvidia.com/jetson/archives/r35.3.1/DeveloperGuide/text/SD/Kernel/KernelCustomization.html#to-build-display-kernel-modules

I have followed the guide to build the display modules. I am able to build them, and I placed the .ko files in the rootfs in extra/opensrc-disp/, and added the modules to the modules.dep file. However, the display still does not work. Is there a script provided by nvidia somewhere to install the display modules?

Go through this post:

Have you run sudo depmod -a?