Support for 3 Cameras on Custom Carrier Board – Jetson Orin NX

Hi Team,

I am using the Jetson Orin NX module with a custom carrier board.

I would like to interface and use 3 cameras simultaneously on my carrier board. I have attached (or will attach) the schematic for reference.

Could you please help me understand:

  • What hardware changes are required in the schematic to support 3 cameras?

  • Any specific CSI lane configuration or routing guidelines to follow?

  • Required device tree (DTS) modifications for enabling 3 cameras

  • Any driver or kernel-level changes needed

  • Are there any limitations in the Orin NX for using multiple cameras simultaneously?

Also, it would be helpful if you could provide:

Jetson Orin NX Series and Orin Nano Series Design Guide has guidance for the cameras in Chapter 10 and P3768_A04_Concept_schematics.pdf in Jetson Orin Nano Developer Kit Carrier Board Reference Design Files shows camera connection examples on page 18.

Camera software documentation: Camera Development — NVIDIA Jetson Linux Developer Guide

Hi niyas2,

Regarding any driver or kernel-level changes needed, the main work is usually in the camera driver and the device tree.

In the device tree, each camera must be described correctly, including its sensor node, CSI/VI endpoints, and the corresponding entry in tegra-camera-platform. Even if the cameras use the same sensor, each instance typically requires its own node (with its own I2C address, GPIOs, and endpoint configuration). Properties such as bus-width, port-index, vc-id (if used), clocks, GPIOs, and regulators must match the actual hardware design. Additionally, each camera can define its own set of modes (resolution, framerate, etc.), so these need to be properly configured per sensor instance depending on your use case.

On the driver side, you need to verify whether your camera sensors are already supported on your platform. If they are supported, major changes may not be required beyond validating the existing modes and controls. If a sensor is not yet supported, then a dedicated V4L2 sensor driver (or porting an existing one) will be needed. ChrisB already shared quite complete guides, but you can also refer to this documentation for building the Kernel, Modules, and DTBs for Jetson Orin NX: NVIDIA Jetson Orin NX.

For any additional kernel changes beyond basic bring-up, that will depend on the specific requirements of each camera. For example, if you need to add a new supported resolution, framerate, HDR mode, or any custom behavior, then additional driver or kernel-level modifications may be required.

Jose Morera
Embedded Software Engineer at RidgeRun
Contact us: support@ridgerun.com
Developers wiki: https://developer.ridgerun.com
Website: www.ridgerun.com

Hi Jose Morera,

Thank you for the detailed explanation.

I am using the IMX219 camera sensor with the Jetson Orin NX, and I have downloaded the SDK for JetPack 6.2.1.

I would like to enable 3 camera sensors on my custom carrier board.

Could you please guide me on:

  • Which specific DTS/DTSI files need to be modified in JetPack 6.2.1 for adding multiple camera instances?

  • The steps to correctly define 3 IMX219 sensor nodes (with I2C address, CSI endpoints, and tegra-camera-platform entries)

  • Any required changes in the port-index / bus-width / vc-id configuration for multi-camera setup

  • Whether any additional configuration is needed for VI/CSI routing

It would be very helpful if you could provide step-by-step guidance or a reference DTS example for enabling multiple IMX219 cameras.

Thank you for your support.

Hi @niyas2,

The IMX219 sensor is already supported in Jetson Linux sources, so you can use the existing device tree examples as a starting point.

For JetPack 6.2.1 (Jetson Linux 36.x), you can find relevant DTS overlay examples under:

hardware/nvidia/t23x/nv-public/overlay/

In particular, you can refer to for example:

tegra234-p3767-camera-p3768-imx219-imx477.dts

This example shows how an IMX219 sensor is integrated (along with another sensor), and it is a good reference to understand how to define sensor nodes, endpoints, and tegra-camera-platform entries. You can use it as a base to extend support to 3 IMX219 cameras.

For your use case, you will need to define one sensor node per camera, even if all sensors are IMX219. Each node should have its own I2C address (or use an I2C mux if they share the bus), CSI endpoint, and GPIO configuration (such as reset or power-down if applicable). In addition, you must add the corresponding entries in tegra-camera-platform, ensure each camera has a unique and correct port-index, set the bus-width according to the number of CSI lanes used, and only define vc-id if you are using virtual channels (for example, with a deserializer).

If you create a custom device tree overlay file, make sure to add it to:

hardware/nvidia/t23x/nv-public/overlay/Makefile

If you prefer following an example-driven approach, I strongly recommend reviewing the same sources mentioned above in detail. You can download them from: NVIDIA Jetson Linux 36.4.4

Additionally, the documentation shared by ChrisB_NV is very useful. In particular, the Device-tree overlay section provides clear guidance on how to apply DTB changes.

Jose Morera
Embedded Software Engineer at RidgeRun
Contact us: support@ridgerun.com
Developers wiki: https://developer.ridgerun.com
Website: www.ridgerun.com

Hi Jose,

Thank you for the detailed explanation and references.

I have downloaded the (nvidia sdk from the sdk manager) JetPack 6.2.1 (Jetson Linux 36.x) SDK. I would like some clarification on the following points:

  • Where exactly should I create or place the custom DTS/DTSI overlay file in the source tree?

  • After creating the DTS file, what are the exact steps to build and apply the DTB/overlay?

Additionally, could you please share a sample DTS (or DTSI) example for enabling three IMX219 cameras?

Hello niyas2,

The hardware directory is located in the kernel_oot_modules_src.tbz2 file. You can find it using:

find . -type f -name "kernel_oot_modules_src.tbz2"

Then extract it:

mkdir -p kernel_oot_modules_src && tar -xjf kernel_oot_modules_src.tbz2 -C kernel_oot_modules_src

There you will find the Makefile I mentioned before. You can use the following device trees as examples you can create your dtbs in the same directory.

kernel_oot_modules_src/hardware/nvidia/t23x/nv-public/overlay$ ls | grep imx219
tegra234-camera-rbpcv2-imx219.dtsi
tegra234-p3767-camera-p3768-imx219-A.dts
tegra234-p3767-camera-p3768-imx219-C.dts
tegra234-p3767-camera-p3768-imx219-dual.dts
tegra234-p3767-camera-p3768-imx219-imx477.dts
tegra234-p3767-camera-p3768-imx477-imx219.dts

You can find a detailed guide on how to create your custom files and build them in the NVIDIA Jetson Linux Developer Guide.

I hope this helps.

Jose Morera
Embedded Software Engineer at RidgeRun
Contact us: support@ridgerun.com
Developers wiki: https://developer.ridgerun.com
Website: www.ridgerun.com

Hi jose.morera

Thank you for your support. I found the folder. I would like to enable the 40-pin header peripherals (I2S, GPIO, and UART) and also get the CSI camera working. How can I implement this?

I want these features to be available after booting. Which DTS file should I modify?

  • Custom GPIO/I2C/UART

  • IMX219 Dual camera