Camera driver install_full.sh cannot find deb package for Jetson Orin Nano kernel 5.15.148-tegra

Trying to set up an ArduCAM IMX477 V3Link camera on a Jetson Orin Nano Developer Kit, but the install script keeps dying before it installs anything.

Environment:

  • NVIDIA Jetson Orin Nano Developer Kit
  • Kernel: 5.15.148-tegra-36.4.0-20240912212859

Command:

sudo ./install_full.sh -m imx477_v3link

Output:

./install_full.sh: line 19: warning: command substitution: ignored null byte in input
NVIDIA Jetson Orin Nano Developer Kit
--2024-11-07 21:46:04-- https://github.com/ArduCAM/MIPI_Camera/releases/download/v0.0.3/imx477_v3link_links.txt
Resolving github.com ... 140.82.113.3; connected over :443
HTTP request sent, awaiting response... 302 Found
Redirect to objects.githubusercontent.com (signed URL)
HTTP request sent, awaiting response... 200 OK
Length: 895 [application/octet-stream]
Saving to: 'imx477_v3link_links.txt' ... 100%
2024-11-07 21:46:05 (20.1 MB/s) - 'imx477_v3link_links.txt' saved [895/895]
./install_full.sh: line 111: 5.15.148-tegra-36.4.0-20240912212859: syntax error: invalid arithmetic operator (error token is ".15.148-tegra-36.4.0-20240912212859")
Cannot find the corresponding deb package, please send the following information to [email protected]
Kernel version: 5.15.148-tegra-36.4.0-20240912212859
Jetson type: NVIDIA Jetson Orin Nano Developer Kit

It downloads imx477_v3link_links.txt fine, then throws that syntax error at line 111 and says it can’t find a matching deb package. Is this kernel version even supported, or do I need to grab the deb manually?

That failure is the script’s kernel-version comparison choking. Line 111 is doing an arithmetic comparison on the version string, which is why you get:

5.15.148-tegra-36.4.0-20240912212859: syntax error: invalid arithmetic operator

Because that comparison breaks, the script never resolves a matching package and bails with “Cannot find the corresponding deb package”.

There is a matching driver package for your setup (5.15.148-tegra-36.4.0 on Orin Nano, t234-nx). I’ve sent it to you via private message since it’s a targeted package. The filename is:

arducam-nvidia-l4t-kernel-t234-nx-5.15.148-tegra-36.4.0-20241108101836_arm64_imx477-v3link.deb

Install it manually with:

sudo dpkg -i arducam-nvidia-l4t-kernel-t234-nx-5.15.148-tegra-36.4.0-20241108101836_arm64_imx477-v3link.deb

Paste the full output if anything fails.

Thanks, got the package from the private message and ran the dpkg install. It unpacked and set up, but there’s an error at the end about a missing kernel module:

(Reading database ... 308253 files and directories currently installed.)
Preparing to unpack arducam-nvidia-l4t-kernel-t234-nx-5.15.148-tegra-36.4.0-20241108101836_arm64_imx477-v3link.deb ...
Unpacking arducam-nvidia-l4t-kernel (5.15.148-tegra-36.4.0-20241108101836) ...
Setting up arducam-nvidia-l4t-kernel (5.15.148-tegra-36.4.0-20241108101836) ...
mv: cannot stat '/boot/arducam/arducam_csi2.ko': No such file or directory

So the package installed, but /boot/arducam/arducam_csi2.ko wasn’t there for the post-install step. I’m not sure whether the module actually ended up in the right place or not.

That mv error means the postinst script expected /boot/arducam/arducam_csi2.ko and it wasn’t there, so the module never got moved into place. Before assuming the driver is broken, let’s verify what the system actually sees.

Run these two commands and paste the output:

ls /dev/video0
dmesg | grep imx

That will tell us whether the video node exists and whether the imx477 driver is binding.

I ran dmesg | grep imx. /dev/video0 does show up, but I still can’t get any frames out of the camera. What command should I use to actually grab an image?

[10.281213] imx477 9-001a: tegracam sensor driver:imx477_v2.0.6
[10.596980] tegra-camrtc-capture-vi tegra-capture-vi: subdev imx477 9-001a bound
[10.598416] imx477 10-001a: tegracam sensor driver:imx477_v2.0.6
[10.899056] imx477 10-001a: imx477_board_setup: error during i2c read probe (-121)
[10.899085] imx477 10-001a: board setup failed
[10.899164] imx477: probe of 10-001a failed with error -121
[64.144511] imx477 9-001a: imx477_write_reg: i2c write failed, 0x104 = 1
[64.144521] imx477 9-001a: imx477_set_group_hold: Group hold control error
[380.326924] imx477 9-001a: imx477_write_reg: i2c write failed, 0x104 = 1
[380.326934] imx477 9-001a: imx477_set_group_hold: Group hold control error
[639.993893] imx477 9-001a: imx477_write_reg: i2c write failed, 0x104 = 1
[639.993903] imx477 9-001a: imx477_set_group_hold: Group hold control error
[695.588066] imx477 9-001a: imx477_write_reg: i2c write failed, 0x104 = 1
[695.588077] imx477 9-001a: imx477_set_group_hold: Group hold control error
[704.435770] imx477 9-001a: imx477_write_reg: i2c write failed, 0x104 = 1
[704.435780] imx477 9-001a: imx477_set_group_hold: Group hold control error

The imx477 driver looks like it’s bound at 9-001a, but 10-001a failed to probe and there are a bunch of I2C write failures. Could that be why I’m getting nothing?

Right, the binding on 9-001a is a good sign, but the 10-001a errors are the problem: “error during i2c read probe (-121)” means the sensor at that address didn’t respond, and the repeated “i2c write failed, 0x104 = 1” plus “Group hold control error” on 9-001a suggest the I2C comms to the sensor are flaky, not that video0 is missing.

Can you run this and paste the output?

v4l2-ctl --info

I want to see how the node is registered before deciding whether this is a driver issue or a link/I2C issue.

Here’s the v4l2-ctl --info output:

Driver Info:
  - Driver name: tegra-video
  - Card type: vi-output, imx477 9-001a
  - Bus info: platform:tegra-capture-vi:2
  - Driver version: 5.15.148
  - Capabilities: 0x84200001 (Video Capture, Streaming, Extended Pix Format, Device Capabilities)
  - Device Caps: 0x04200001 (Video Capture, Streaming, Extended Pix Format)
Media Driver Info:
  - Driver name: tegra-camrtc-ca
  - Model: NVIDIA Tegra Video Input Device
  - Media version: 5.15.148
  - Hardware revision: 0x00000003 (3)
  - Driver version: 5.15.148
Interface Info:
  - ID: 0x0300000b
  - Type: V4L Video
Entity Info:
  - ID: 0x00000009 (9)
  - Name: vi-output, imx477 9-001a
  - Function: V4L2 I/O
  - Pad 0x0100000a: 0: Sink
  - Link 0x0200000f: from remote pad 0x1000006 of entity '13e00000.host1x:nvcsi@15a00000-' (Unknown sub-device (0002000a)): Data, Enabled

So video0 is there and reports “vi-output, imx477 9-001a”, but I still get no video output. Does this rule out the driver and point to hardware?

Based on everything here, the driver is loading and video0 is registered, but the I2C errors are the showstopper:

  • imx477 10-001a: error during i2c read probe (-121) and board setup failed
  • imx477 9-001a: repeated imx477_write_reg: i2c write failed, 0x104 = 1 and Group hold control error

That pattern usually means the sensor isn’t communicating reliably over I2C, and this kernel/build combo (36.4.0) isn’t stable with the V3Link camera. The supported/stable config is L4T 36.3.0.

Recommended steps:

  1. Flash the Jetson to L4T 36.3.0.
  2. Then install the driver with the standard ArduCAM install script (sudo ./install_full.sh -m imx477_v3link).

Supported platforms are listed here:
https://docs.arducam.com/V3Link-Camera-Solution/V3Link-Camera-Solution-for-NVIDIA-Platform/Introduction/#supported-platforms

If you still see -121 I2C errors on 36.3.0, we’d be looking at the V3Link wiring/power next, but start with the reflash.