Failed to load kernel object files while flashing

Hi,

I’m trying to build a custom BSP for our custom carrier board based on the Jetson Orin Nano and followed the procedure given in the below attached NVIDIA documentation.

So far, I have:

  • Generated the pinmux .dtsi files and placed them in the appropriate directories

  • Created the custom_board.conf file

  • Included the generated .dtsi files in the configuration

  • Performed kernel customization

  • Built both in-tree and out-of-tree modules

  • Generated the DTB files

  • Successfully flashed the image

However, after flashing, I noticed that some kernel object.ko files are missing in the flashed image. Specifically, I’m trying to work with a GMSL camera, I couldn’t find the MAX9296-related kernel modules.

I’ve also installed the ZED SDK and ZED Link Mono driver, I still don’t see any messages related to the ZED-X or MAX9296 deserializer when running dmesg | grep.

Could somebody guide me on what steps I might be missing—particularly regarding ensuring the correct kernel modules are included and loaded? Any help would be greatly appreciated.

Hello @kiruthiga,

I would suggest you start by checking under:

/lib/modules/<YOUR KERNEL VERSION>/<PATH TO THE MODULE>/

The path to the module should be the same path where its source code is. So for example, for camera drivers or even GMSL SERDES drivers, it is usual that the driver source code is located under:

/drivers/i2c/media

So you can check if you have your source code and look in your boar to see if the .ko’s are there.

Now, if you don’t the KO’s it could be one of two reasons:

  1. They are not being built.
  2. They are being built as part of the kernel.

To verify this, you can check your kernel configuration .config file to verify if they are configured to be built and how “y” means kernel built-in and “m” means module.

If the modules are present in your /lib/modules... directory, then the issue is probably related with your DTB, since modules are only loaded if you have their respective nodes on the device tree with their corresponding “compatibles”.

Hope that helps.
Please let me know if you have further questions.

best regards,
Andrew
Embedded Software Engineer at ProventusNova

Added note: A case in which module load itself fails is different from not finding a module. Once you’ve changed actual kernel source code, or changed an integrated feature (where “CONFIG_feature=y”), then all modules also should be rebuilt and a new CONFIG_LOCALVERSION chosen.

If you got all of the above correct, but a module still fails to load, then there is a good chance that you didn’t update modules in the initrd (especially if boot fails since modules in the initrd are usually ones required for boot).

You can list loaded modules with lsmod.