Arducam dual camera overlay fails on Jetson Nano with custom SD boot device tree

Hi, I’m trying to get an Arducam dual camera working on a Jetson Nano dev kit and I’m stuck at the driver/overlay step. When the overlay tries to apply I get:

Failed to overlay /mnt/APP/boot/dtb/kernel_tegra210-p3448-0002-p3449-0000-b00.dtb with /boot/arducam/dts/tegra210-p3448-all-p3449-0000-camera-arducam-dual.dtbo

I suspect it’s because I modified the device tree so the board boots from an SD card. The Arducam config in /boot/arducam that does the dtb substitution probably doesn’t know about my modified dtb. I have a second identical Jetson Nano with the same JetPack but an unmodified device tree, and the camera works fine there. Any suggestions on getting the overlay to apply?

Thanks for the report. Just to narrow this down: are you using the official Jetson Nano developer kit carrier board (jetson-base-a), or a third-party carrier? The overlay failure together with the imx219 i2c probe errors you’d normally see in dmesg usually points at the sensor not being set up correctly. Can you paste the output of uname -a / dpkg -l | grep -E 'arducam|nvidia-l4t' and the imx219 lines from dmesg?

Using the official carrier board, jetson-base-a. Here’s the environment:

  • L4T 32.7.3 (R32, REVISION: 7.3, GCID: 31982016, BOARD: t210ref, EABI: aarch64)
  • Custom modified device tree to boot from SD card
  • Product: UCTRONICS B0223 (Arducam Jetson Nano/Xavier NX Cameras)
  • arducam-nvidia-l4t-kernel 4.9.299-tegra-32.7.3-20230111085049
  • nvidia-l4t-kernel 4.9.299-tegra-32.7.3-20221122092935
  • nvidia-l4t-kernel-dtbs 4.9.299-tegra-32.7.3-20221122092935
  • nvidia-l4t-kernel-headers 4.9.299-tegra-32.7.3-20221122092935

Thanks. Can you grab the imx219 probe messages from dmesg? That will show whether it’s purely an overlay problem or whether the sensor isn’t responding on I2C.

Here’s what dmesg shows for the cameras:

[ 1.778624] imx219 7-0010: tegracam sensor driver:imx219_v2.0.6
[ 1.802076] imx219 7-0010: imx219_board_setup: error during i2c read probe (-121)
[ 1.809825] imx219 7-0010: board setup failed
[ 1.814279] imx219: probe of 7-0010 failed with error -121
[ 1.814927] imx219 8-0010: tegracam sensor driver:imx219_v2.0.6
[ 1.838326] imx219 8-0010: imx219_board_setup: error during i2c read probe (-121)
[ 1.845896] imx219 8-0010: board setup failed
[ 1.850328] imx219: probe of 8-0010 failed with error -121

Those -121 errors are I2C read failures during imx219_board_setup, so the driver probes but can’t talk to the sensors. Before going further, what have you already tried? Have you tested the same camera on the second Nano, or just the driver install?

What I’ve tried so far:

  • Debugged the Arducam Python scripts.
  • The device tree is modified to boot from SD card, which I think is the trigger.
  • Verified the camera works on a second unmodified board with the same JetPack.
  • Tried the overlay update again, same failure.

I mainly need help getting the overlay/update to apply.

One thing that stands out: Arducam has not released the Jetvariety camera driver for L4T 32.7.3. Even on the official carrier board, the camera driver can’t be installed for that release. The supported approach is to flash JetPack to a version in the supported list here: Introduction to Arducam Jetson Cameras - Arducam Wiki and then install the camera driver again.

That’s the confusing part: my second identical Nano is on the same JetPack/L4T 32.7.3 but with an unmodified device tree, and the camera turns on and works there. So the driver clearly installed on that board. The only difference I can see is the SD-card boot device tree modification on this one.

Right, if the second board works on the same JetPack, then the unsupported L4T version isn’t the whole story. The overlay error is the key:

Failed to overlay /mnt/APP/boot/dtb/kernel_tegra210-p3448-0002-p3449-0000-b00.dtb with /boot/arducam/dts/tegra210-p3448-all-p3449-0000-camera-arducam-dual.dtbo

The /boot/arducam config file that substitutes the dtb doesn’t account for your modified device tree, so the update fails. The cleanest test is to re-flash the system to stock and see if the overlay applies. After that, verify whether the update issue is resolved.

I’d rather not re-flash. The setup is complex, and re-flashing would mean reinstalling the whole development environment, with no guarantee it would help because I still need a modified device tree. The unmodified board already proves the camera works, so it’s not the camera or driver itself.

I understand, but a self-modified device tree is outside what we can troubleshoot on our side. If re-flashing isn’t possible, this specific device tree/overlay issue is better handled by NVIDIA’s official support, since they can speak to the dtb/overlay side more precisely.

Before I go that route, is there a documented manual process for applying the Arducam overlay? The automatic procedure clearly doesn’t always succeed, so step-by-step instructions for doing it by hand would help.

There isn’t a manual step-by-step procedure we can provide for a custom modified device tree. You modified the dtb yourself, and we have no way to know exactly what changed or whether it’s compatible with the Arducam driver/overlay. The other Nano being able to install the driver and turn on the camera confirms the camera and driver are functional; the blocker is the custom dtb. Reflashing is still the simplest and most effective path from our side.

Reflashing isn’t viable for me. I still need a modified device tree, so after a reflash I’d end up with an empty system, have to set up the whole dev environment again, and land on the same system where the driver likely won’t work. Since Arducam’s stated policy is that for third-party boards that need to modify the device tree themselves you provide the source code, can you send me the source code and instructions? I’ve already provided dmesg output and all the info I have; the only advice so far has been to reinstall/reflash.

To summarize where this landed: the overlay fails because the Arducam /boot/arducam config substitutes the stock dtb and doesn’t account for your SD-card boot device tree modifications. The working second Nano on the same JetPack confirms the camera/driver are OK, so this is specific to the custom dtb. We don’t have a documented manual overlay procedure for a modified device tree, and source code for that scenario isn’t something I can provide here. The only step we can recommend on our end is re-flashing to a supported stock L4T. For the device tree/overlay details, NVIDIA official support is the best next step.