Vision Components MIPI CSI-2 driver for NVIDIA Jetson Orin NX (Sony imx415-c)

Hello,

My team and I working on the NVIDIA Jetson Orin NX 16GB with two Sony IMX 415-C sensors. We encountered some difficulties during the integration process. When we run the dmesg command, we get the following error messages:

imx219_board_setup: invalid sensor model id: 6d69

imx219_board_setup: error during i2c read probe (-121) board setup failed.

Has anyone solved this problem yet ?

We found the GitHub repository for the driver but unfortunately our card is not supported. There’s a branch called “9-support-for-jetson-orin-nano” that might be able to solve the problem, but it’s not yet merged into the master.

1 Like

hello ttvexcv,

it’s error reported by sensor driver side, board setup is the very beginning function to register camera device to linux kernel.
please see-also Sensor Software Driver Programming to review the driver implementation.

Thank for your reply.

I used sdkmanager to get the correct board support package for Orin NX.
However I can’t find <top>/hardware/nvidia/platform/ as mentionned in the documentation.

ls nvidia/nvidia_sdk/JetPack_5.1.1_Linux_JETSON_ORIN_NX_TARGETS/Linux_for_Tegra

apply_binaries.sh                        jetson-agx-orin-devkit-industrial.conf  l4t_generate_soc_bup.sh           p2972-0000-devkit-maxn.conf               p3737-0000+p3701-0000-as-p3767-0003.conf
bootloader                               jetson-agx-orin-devkit-maxn.conf        l4t_sign_image.sh                 p2972-0000-devkit-slvs-ec.conf            p3737-0000+p3701-0000-as-p3767-0004.conf
build_l4t_bup.sh                         jetson-agx-xavier-devkit.conf           nvautoflash.sh                    p2972.conf                                p3737-0000+p3701-0000.conf
clara-agx-xavier-devkit.conf             jetson-agx-xavier-ind-noecc.conf        nvmassfusegen.sh                  p3449-0000+p3668-0000-qspi-sd.conf        p3737-0000+p3701-0000-maxn.conf
e3900-0000+p2888-0004-b00.conf           jetson-agx-xavier-industrial.conf       nvsdkmanager_flash.sh             p3449-0000+p3668-0001-qspi-emmc.conf      p3740-0002-b00+p3701-0002.conf
flash.sh                                 jetson-agx-xavier-industrial-mxn.conf   nv_tegra                          p3509-0000+p3668-0000-qspi.conf           p3740-0002-b01+p3701-0002.conf
generate_capsule                         jetson_board_spec.cfg                   nv_tools                          p3509-0000+p3668-0000-qspi-sd.conf        p3740-0002-c01+p3701-0008.conf
holoscan-devkit.conf                     jetson-orin-nano-devkit.conf            odmfuse.func                      p3509-0000+p3668-0001-qspi-emmc.conf      p3767.conf.common
igx-orin-devkit.conf                     jetson-orin-nano-devkit-nvme.conf       odmfuseread.sh                    p3509-a02+p3767-0000.conf                 p3768-0000+p3767-0000.conf
jetson_additional_board_spec.cfg         jetson-xavier.conf                      odmfuse.sh                        p3509-a02+p3767-0000-maxn.conf            p3768-0000+p3767-0000-maxn.conf
jetson-agx-orin-devkit-as-jao-32gb.conf  jetson-xavier-maxn.conf                 p2822-0000+p2888-0001.conf        p3668.conf.common                         p3768-0000+p3767-0000-nvme.conf
jetson-agx-orin-devkit-as-nano4gb.conf   jetson-xavier-nx-devkit.conf            p2822-0000+p2888-0004.conf        p3701.conf.common                         README_Autoflash.txt
jetson-agx-orin-devkit-as-nano8gb.conf   jetson-xavier-nx-devkit-emmc.conf       p2822-0000+p2888-0008.conf        p3711-0000+p3701-0002.conf                rootfs
jetson-agx-orin-devkit-as-nx-16gb.conf   jetson-xavier-nx-devkit-qspi.conf       p2822-0000+p2888-0008-maxn.conf   p3737-0000+p3701-0000-as-p3701-0004.conf  source
jetson-agx-orin-devkit-as-nx-8gb.conf    jetson-xavier-slvs-ec.conf              p2822-0000+p2888-0008-noecc.conf  p3737-0000+p3701-0000-as-p3767-0000.conf  source_sync.sh
jetson-agx-orin-devkit.conf              kernel                                  p2972-0000.conf.common            p3737-0000+p3701-0000-as-p3767-0001.conf  tools

Have I forgotten or misunderstood something?

Additional question : How to include my custom .dtsi to main .dts and rebuild the new image ?

hello ttvexcv,

please visit Jetson Linux 35.3.1 | NVIDIA Developer to download [Driver Package (BSP) Sources]. you’ll need to extract kernel_src.tbz2 package to obtain the device tree sources.
please see-also developer guide, Kernel Customization for the steps to build the kernel.

Hello,

I have carried out the following steps, in accordance with the documentation:

  • Create my file tegra234-camera-imx415-dual.dtsi in the directory hardware/nvidia/platform/t23x/common/kernel-dts/t234-common-modules/

      panthera3@workstation:bsp_sources/kernel_src$ ls hardware/nvidia/platform/t23x/common/kernel-dts/t234-common-modules/
      tegra234-camera-ar0234-a00.dtsi  tegra234-camera-imx185-a00.dtsi   tegra234-camera-imx415-dual.dtsi  tegra234-cvb-e2425-1099.dtsi  tegra234-p3711-p3713-pcie.dtsi
      tegra234-camera-e3331-a00.dtsi   tegra234-camera-imx274-dual.dtsi  tegra234-camera-p3762-a00.dtsi    tegra234-cvm-e2421-1098.dtsi  tegra234-super-module-e2614.dtsi
      tegra234-camera-e3333-a00.dtsi   tegra234-camera-imx390-a00.dtsi   tegra234-camera-p3783-a00.dtsi    tegra234-cvm-e2421-1099.dtsi
    
  • Create my file imx415.c in the directory ./kernel/nvidia/drivers/media/i2c/imx415

    panthera3@workstation: bsp_sources/kernel_src/kernel/nvidia/drivers/media/i2c$ ls | grep imx
    imx185_mode_tbls.h
    imx185_v1_mode_tbls.h
    imx214.c
    imx219_mode_tbls.h
    imx268_mode_tbls.h
    imx274_mode_tbls.h
    imx318_mode_tbls.h
    imx390_mode_tbls.h
    imx415.c
    imx477_mode_tbls.h
    nv_imx185.c
    nv_imx185_v1.c
    nv_imx219.c
    nv_imx268.c
    nv_imx274.c
    nv_imx318.c
    nv_imx390.c
    nv_imx477.c
    
  • Add the line obj-$(CONFIG_VIDEO_IMX415) += imx415.o to the file ./kernel/nvidia/drivers/media/i2c/Makefile

    panthera3@workstation:bsp_sources/kernel_src/kernel/nvidia/drivers/media/i2c$ grep -ir CONFIG_VIDEO_IMX415
    Makefile:obj-$(CONFIG_VIDEO_IMX415) += imx415.o
    
  • Add CONFIF_VIDEO_IMX415=m line to ./kernel/kernel-5.10/arch/arm64/configs/tegra-defconfig file

    panthera3@workstation:bsp_sources/kernel_src/kernel/kernel-5.10/arch/arm64/configs$ grep -ir CONFIG_VIDEO_IMX415
    defconfig:CONFIG_VIDEO_IMX415=m
    
  • Build kernel in kernel_output directory

    panthera3@workstation:bsp_sources/kernel_src$ mkdir kernel_out
    panthera3@workstation:bsp_sources/kernel_src$ ./nvbuild.sh -o ~/Workspace/Orin/nvidia/bsp_sources/kernel_src/kernel_out
    ...
      LD [M]  sound/soc/tegra/snd-soc-tegra210-mixer.ko
      LD [M]  sound/soc/tegra/snd-soc-tegra210-mvc.ko
      LD [M]  sound/soc/tegra/snd-soc-tegra210-ope.ko
      LD [M]  sound/soc/tegra/snd-soc-tegra210-sfc.ko
      LD [M]  sound/tegra-safety-audio/safety-i2s.ko
    Kernel sources compiled successfully.
    

After compilation, I can’t find the imx415.ko file in the outuput.

According to the documentation, the imx415.ko file should be located in <OUT>/nvidia/kernel/drivers/media/i2c/<camera>.ko

Here are the directory contents after the build :

panthera3@workstation:bsp_sources/kernel_src/kernel_out$ ls
arch   certs   drivers  include  ipc     kernel-int-overlays.txt  lib       mm               modules.builtin.modinfo  modules.order   net      scripts   sound   System.map  virt     vmlinux.o
block  crypto  fs       init     kernel  kernel-overlays.txt      Makefile  modules.builtin  modules-only.symvers     Module.symvers  nvsched  security  source  usr         vmlinux  vmlinux.symvers
panthera3@workstation:bsp_sources/kernel_src/kernel/kernel-5.10$ ls
android-patches  block  COPYING  crypto         drivers  hardware  init  Kbuild   kernel                   kernel-overlays.txt  LICENSES     Makefile  net     rt-patches  scripts   sound  usr   WD
arch             certs  CREDITS  Documentation  fs       include   ipc   Kconfig  kernel-int-overlays.txt  lib 

How do I recover the imx415.ko file after the build?

1 Like

please dig into these building messages, did you see IMX415 files has included?

# dig into output files
panthera3@workstation:bsp_sources/kernel_src$ ls
hardware  kernel  kernel_out  l4t-gcc  nvbuild.sh  nvcommon_build.sh

panthera3@workstationbsp_sources/kernel_src$ find . -type f -name *imx415*
./hardware/nvidia/platform/t23x/common/kernel-dts/t234-common-modules/tegra234-camera-imx415-dual.dtsi
./kernel/nvidia/drivers/media/i2c/imx415.c
# dig into output logs
panthera3@workstation:bsp_sources/kernel_src$ ./nvbuild.sh -o ~/Workspace/Orin/nvidia/bsp_sources/kernel_src/kernel_out > building.log

panthera3@workstation:bsp_sources/kernel_src$ cat building.log | grep 415 | wc -l
0

I can’t find any trace of an imx415 file.

1 Like

hello ttvexcv,

it might be something wrong with your kernel config.
could you please revise the Makefile,
for example, Makefile:obj-y += imx415.o to force compiler include imx415 sources to built the code.

1 Like

Hi JerryChang, thanks for your quick reply.

I’ll give it a try now.

I have updated ./kernel/nvidia/drivers/media/i2c/Makefile as follows

subdir-ccflags-y += -Werror

ccflags-y += -I$(srctree)/drivers/media/platform/tegra
ccflags-y += -I$(srctree)/drivers/video/tegra/camera

obj-$(CONFIG_NV_VIDEO_IMX185) += nv_imx185.o
obj-$(CONFIG_NV_VIDEO_IMX185) += nv_imx185_v1.o
obj-$(CONFIG_NV_VIDEO_IMX477) += nv_imx477.o
obj-$(CONFIG_NV_VIDEO_IMX219) += nv_imx219.o
obj-$(CONFIG_NV_VIDEO_IMX268) += nv_imx268.o
obj-$(CONFIG_NV_VIDEO_IMX274) += nv_imx274.o
obj-$(CONFIG_NV_VIDEO_IMX318) += nv_imx318.o
obj-y += imx415.o
obj-$(CONFIG_NV_VIDEO_LC898212) += nv_lc898212.o
obj-$(CONFIG_NV_VIDEO_OV5693) += nv_ov5693.o
obj-$(CONFIG_NV_VIDEO_OV9281) += nv_ov9281.o
obj-$(CONFIG_NV_VIDEO_OV10823) += nv_ov10823.o
obj-$(CONFIG_NV_VIDEO_OV23850) += nv_ov23850.o
obj-$(CONFIG_I2C_IOEXPANDER_PCA9570) += pca9570.o
obj-$(CONFIG_VIDEO_TC358840) += tc358840.o
obj-$(CONFIG_VIDEO_LT6911UXC) +=lt6911uxc.o
obj-$(CONFIG_I2C_IOEXPANDER_SER_MAX9295) += max9295.o
obj-$(CONFIG_I2C_IOEXPANDER_DESER_MAX9296) += max9296.o
obj-$(CONFIG_NV_VIDEO_IMX390) += nv_imx390.o
obj-$(CONFIG_NV_VIDEO_AR0234) += nv_ar0234.o
obj-$(CONFIG_NV_VIDEO_HAWK_OWL) += nv_hawk_owl.o
obj-$(CONFIG_NV_DESER_MAX96712) += max96712.o
obj-$(CONFIG_VIDEO_ECAM) += ar1335.o
ar1335-objs :=  ar1335_common.o
1 Like

Does NVIDIA supply the nv_imx415.c driver for imx415 sensor as for the 185, 129, 268, 274, 318, 390 and 477 ?

hello ttvexcv,

no, IMX415 is not supported by default.

all default supported camera drivers were located at… $public_sources/kernel_src/kernel/nvidia/drivers/media/i2c/*
you may check Jetson Linux 35.3.1 | NVIDIA Developer to download [Driver Package (BSP) Sources] for confirmation.

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