How can I get the list of all available and functional drivers for cameras on TX1 from kernel source code L4T 28.1 ?

I have a goal to find out all working drivers for cameras on Jetson TX1 L4T 28.1
I downloaded the source code of the kernel of L4T for Jetson TX1. and in the :


there are a lot of drivers source codes for different cameras.

Question 1: are all of these drivers in kernel-4.4/drivers/media/i2c folder and it subfolders are able to be working with the Jetson TX1 and were tested with L4T 28.1 ?

Question 2: If I would want to try different CSI cameras from kernel-4.4/drivers/media/i2c folder with default Jetson TX1 camera PCB, (where ov5693 is connected) and If I make the same physical connector with the same pinout that you have on default ov5693 for the camera I want to test, will these cameras work and what changes should I do in the system to make them work?

Thank you

I’ve been following this tutorial: for building kernel modules on Jetson TX1 and I made the arduino drivers work on L4T 28.1
I also marked with dot in config file editor the field that says include IMX219 driver (I need it to make raspberry pi r1.3 ov5647 csi cameras, and I have a camera PCB for them and it plugs to Jetson TX1 board), but I got some errors during the module compilation, here (I skipped a part of log without errors):

CALL    scripts/
  CC [M]  drivers/media/i2c/imx219.o
  Building modules, stage 2.
  MODPOST 27 modules
ERROR: "camera_common_g_mbus_config" [drivers/media/i2c/imx219.ko] undefined!
ERROR: "camera_common_create_debugfs" [drivers/media/i2c/imx219.ko] undefined!
ERROR: "camera_common_regulator_get" [drivers/media/i2c/imx219.ko] undefined!
ERROR: "camera_common_s_power" [drivers/media/i2c/imx219.ko] undefined!
ERROR: "regmap_util_write_table_8" [drivers/media/i2c/imx219.ko] undefined!
ERROR: "camera_common_g_fmt" [drivers/media/i2c/imx219.ko] undefined!
ERROR: "camera_common_s_fmt" [drivers/media/i2c/imx219.ko] undefined!
ERROR: "camera_common_try_fmt" [drivers/media/i2c/imx219.ko] undefined!
ERROR: "camera_common_remove_debugfs" [drivers/media/i2c/imx219.ko] undefined!
scripts/Makefile.modpost:91: recipe for target '__modpost' failed
make[1]: *** [__modpost] Error 1
Makefile:1130: recipe for target 'modules' failed
make: *** [modules] Error 2
  INSTALL crypto/cmac.ko
  INSTALL crypto/drbg.ko
  INSTALL crypto/echainiv.ko
  INSTALL crypto/jitterentropy_rng.ko
  INSTALL crypto/md4.ko
  INSTALL crypto/sha256_generic.ko
  INSTALL crypto/tcrypt.ko
  INSTALL drivers/bluetooth/hci_uart.ko
  INSTALL drivers/media/i2c/imx219.ko
cp: cannot stat 'drivers/media/i2c/imx219.ko': No such file or directory
  INSTALL drivers/media/usb/gspca/gspca_main.ko
  INSTALL drivers/media/usb/gspca/gspca_zc3xx.ko
  INSTALL drivers/misc/bluedroid_pm.ko
  INSTALL drivers/net/ethernet/intel/e1000e/e1000e.ko
  INSTALL drivers/net/ethernet/intel/igb/igb.ko
  INSTALL drivers/net/ethernet/realtek/r8169.ko
  INSTALL drivers/net/wireless/bcmdhd/bcmdhd.ko
  INSTALL drivers/pps/pps_core.ko
  INSTALL drivers/ptp/ptp.ko
  INSTALL drivers/usb/serial/ch341.ko
  INSTALL drivers/video/backlight/lcd.ko
  INSTALL drivers/video/backlight/pwm_bl.ko
  INSTALL fs/cifs/cifs.ko
  INSTALL net/bluetooth/bluetooth.ko
  INSTALL net/bluetooth/bnep/bnep.ko
  INSTALL net/bluetooth/hidp/hidp.ko
  INSTALL net/bluetooth/rfcomm/rfcomm.ko
  INSTALL net/bridge/br_netfilter.ko
  DEPMOD  4.4.38tegra-tx1

Did you build loadable module?
Sensor driver must compile as build in module, didn’t support loadable module now.

How can I understand wether it is build in module or loadable module? I’ve been following the tutorial and it says nothing about whether it is loadable or build in module. And where to find how to make it build in module?
Thank you

OK, you are not build loadable module.
Please download the L4T Documentation from download center to follow the “Building the NVIDIA Kernel” to gen your own kernel.

Ok thanks! So with this documentation I will be able to build kernel with all camera drivers available in kernel-4.4/drivers/media/i2c right ?

Also I can’t find in your download center any ‘Building the NVIDIA Kernel’ documents, can you share a link?

Find L4T Documentation

Thank you! Repeating my previous question: So with this documentation I will be able to build kernel with all camera drivers available in kernel-4.4/drivers/media/i2c right ?

You can find the list from the kernel config


@pavlobuidenkov You can select a module to be built-in using the kernel configuration tool by clicking the check box next to the item. There are three settings, off (no symbol), external module (appears as a circle) and built-in (appears as a checkmark).

@Kangalow thanks! this is exactly what I did in gui tool of config file. But now when I boot the system with the new module it doesn’t say anything like ‘probing sensor IMX219’ when my raspberry pi r1.3 cameras are connected to the jetson TX1 carrier board.
The point is that we made a custom camera PCB that plugs to the main carrier board and we can’t get it to debug, so right now we still are not sure whether it is a hardware problem or the driver problem.

@pavlobuidenkov I’m certainly no expert, but my recollection is that RPI 1.3 cameras are based on the OmniVision OV5647. Are you sure your camera isn’t a 2.X? Also, you did not say how the board is connected to the Jetson. Did you modify the device tree?

@Kangalow thanks!
You were right. I was wrong. The current modules I have are ov5647 … So I will buy Raspberry pi IMX219 v 2.x to test…

The board is connected to jetson with the standard connector that jetson has on it, you can see in attached image to this message. No I didn’t modify the device tree for it. I was thinking it doesn’t need any drivers and it just connects directly to the board. I assumed the board doesn’t need any drivers because when I have Jetson Camera pcb connected to the carrier board, but ov5693 disconnected, no new devices appear in /dev/ folder even after reboot.

I have another questin
I looked into the /proc/config.gz and here what I could find about image sensors:

# Camera sensor devices
# CONFIG_VIDEO_OV2659 is not set
# CONFIG_VIDEO_OV7640 is not set
# CONFIG_VIDEO_OV7670 is not set
# CONFIG_VIDEO_OV9281 is not set
# CONFIG_VIDEO_OV9650 is not set
# CONFIG_VIDEO_TC358840 is not set
# CONFIG_VIDEO_VS6624 is not set
# CONFIG_VIDEO_MT9M032 is not set
# CONFIG_VIDEO_MT9P031 is not set
# CONFIG_VIDEO_MT9T001 is not set
# CONFIG_VIDEO_MT9V011 is not set
# CONFIG_VIDEO_MT9V032 is not set
# CONFIG_VIDEO_SR030PC30 is not set
# CONFIG_VIDEO_NOON010PC30 is not set
# CONFIG_VIDEO_M5MOLS is not set
# CONFIG_VIDEO_S5K6AA is not set
# CONFIG_VIDEO_S5K6A3 is not set
# CONFIG_VIDEO_S5K4ECGX is not set
# CONFIG_VIDEO_S5K5BAF is not set
# CONFIG_VIDEO_S5C73M3 is not set

as I understand I already have a driver for the raspberry pi camera imx219 right?
and all of these uncomented and commented devices are gonna work in theory, if I will install drivers for them right?
and is this /proc/config.gz file relates to build in module or to loadable module? I don’t quite understand that.

sorry to ask you to clarify that for me
Thank you!

There are several questions here.
The easiest to answer is the .config file. The config.gz needs to be uncompressed to become the .config file which the system uses, among other things, to define which modules are built in to the kernel, built as stand alone modules, or are excluded from the build entirely.
As you noted, a proxy for the module name is followed by a setting.
If the setting is ‘n’, then the module is not built.
If the setting is ‘y’, then the module is built into the kernel image.
If the setting is ‘m’, then the module is built as an external module.

Note that the drivers tend to be generic, they do not specify any particular given hardware. For example, a generic imx219 sensor may be supported, but additional hardware/features on the Raspberry Pi module may require additional code and as such may require additional development.

It has been my experience that swapping boards with fundamentally different components requires changes at both the driver level and device tree level. For example, if you just swap out the board without modifying the device tree or drivers, how would the kernel know the I2C address of the new camera sensor? Is the address expected to be at the same place as the original sensor?

There are several threads about the IMX219 on this forum, I suggest a quick read through on them to get a feel for what other people have been doing in this area.

@Kangalow. Thank you for your clarification! I will do a research on that.