I imagine it’s possible I need to install Arducam software/drivers, but I wanted to ask first, as the 477 is listed as natively supported, and it’s not obvious where the appropriate Arducam driver is (e.g. they have old listings on github and refer to jetson nano).
Can you please point me to installation instructions or what might be my issue?
Is there another inexpensive camera that should work out-of-the-box? I assumed (perhaps wrongly) that the RPi HQ camera was such an animal.
Thanks,
Hy
Details:
I do see /dev/video0. I get errors after I attempt to get images. For example:
bash go.image
Setting pipeline to PAUSED …
Pipeline is live and does not need PREROLL …
Pipeline is PREROLLED …
Setting pipeline to PLAYING …
New clock: GstSystemClock
GST_ARGUS: Creating output stream
CONSUMER: Waiting until producer is connected…
GST_ARGUS: Available Sensor modes :
GST_ARGUS: 3840 x 2160 FR = 29.999999 fps Duration = 33333334 ; Analog Gain range min 1.000000, max 22.250000; Exposure Range min 13000, max 683709000;
GST_ARGUS: 1920 x 1080 FR = 59.999999 fps Duration = 16666667 ; Analog Gain range min 1.000000, max 22.250000; Exposure Range min 13000, max 683709000;
GST_ARGUS: Running with following settings:
Camera index = 0
Camera mode = 1
Output Stream W = 1920 H = 1080
seconds to Run = 0
Frame Rate = 59.999999
GST_ARGUS: Setup Complete, Starting captures for 0 seconds
GST_ARGUS: Starting repeat capture requests.
CONSUMER: Producer has connected; continuing.
nvbuf_utils: dmabuf_fd -1 mapped entry NOT found
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, threadExecute:734 NvBufSurfaceFromFd Failed.
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, threadFunction:245 (propagating)
Redistribute latency…
Got EOS from element “pipeline0”.
EOS received - stopping pipeline…
Execution ended after 0:00:04.004185463
Setting pipeline to NULL …
GST_ARGUS: Cleaning up
GST_ARGUS: Done Success
Freeing pipeline …
As you can see, dmesg reports an error, and I’m unsure how to interpret the lsmod output. Please let me know what you suggest.
Should this be working without an Arducam driver? I recently found pointers to arducam drivers in https://docs.arducam.com/Nvidia-Jetson-Camera/Native-Camera/Quick-Start-Guide/#12mp-imx477-camera but when trying that, I found that their latest driver won’t install because it depends on Kernel version 5.15.148-tegra-36.4.4-20250616085344 and of course I have a more recent 5.15.148-tegra-36.4.7-20250918154033.
Further, I have a worry that even if we get this working, my orin nano will auto-upgrade to some new kernel version at some point and break these drivers (which is why I was hoping for something that was natively supported).
Check that the device tree overlay you loaded has support for 4-lane. Feel free to share the device tree file.
Regarding your questions:
The error you are seeing for imx477 at 10-001ais expected since you only have one camera connected. It seems you loaded a DTBO that gives support for two cameras. This should not affect the behavior for camera at 9-001a.
lsmod output confirms driver modules is loaded.
modprobe loads the module in case it was not loaded.
Let me know if this helps!
Best regards,
Nico
Embedded Software Engineer at ProventusNova
on that file and got a lot of output I didn’t know how to interpret, so I guess I’m leaning on you for that but let me know if you want the output.
If you know of another imx477 or similar quality M12 mount camera that would work, I’d be happy to try that too, or happy to answer questions to continue debugging this.
Quick question, which JetPack version are you using?
Thanks for sharing the DTB. However, this DTB is the base DTB. Not the DTBO file for IMX477.
I suspect that you are using the overlay that supports IMX477 with 2-lanes. You should try using file: tegra234-p3767-camera-p3768-imx477-dual-4lane.dtbo located in /boot directory.
Can you try the following to test:
Modify your /boot/extlinux/extlinux.conf to include your base DTB as well as the overlay you want to use. Add these lines to the file:
My camera was broken. I ordered another one (same camera) and this time I could get things to (sort of) work. Note–it wasn’t the flat cable, I tried that, it was the camera hardware itself. I am plugged in to cam0 and running the below os:
With this, I was able to access the camera without the dma error I was getting.
Unfortunately it seems like their driver is buggy, e.g. when I put it into 1920x1080, I seem to get the upper left quarter of the image. I can’t seem to get a native 1920x1080 image, even when I try a pipeline with nvarguscamerasrc sensor-id=0 sensor-mode=1 (see #3 below).
So, I thought I’d go back to the NVidia drivers as we were trying, and that worked the same. To do that I ran the /opt/nvidia/jetsonio/jetson-io.py script and wound up with this:
Note that -4lane did not work, but -A or -dual were the same.
Do you know if there a way to get the full image from the hardware at 1920x1080?
So perhaps Arducam just implemented the 1920x1080 mode by just returning the upper left part of the image, instead of binning pixels as they should have done. If so, then that’s disappointing.
I ran an Arducam imx707 using similar Arducam drivers as above, and it doesn’t seem to have the “upper-left” issue.
The “upper-left” image output you’re seeing could be happening due to one of the following:
Misconfiguration for mode 1 in the register table for the IMX477 driver.
Cropping or scaling applied by the camera capture subsystem (nvarguscamerasrc) after capture.
My suggestion would be:
Check the register table for the IMX477 driver to make sure the mode you’re using (1920×1080) is configured correctly according to the Sony IMX477 datasheet.
Try capturing directly with v4l2-ctl to isolate whether the issue comes from the driver or from the Argus camera subsystem.
Capture a test frame: v4l2-ctl --device=/dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=<PIXEL-FORMAT> --stream-mmap --stream-count=1 --stream-to=test.raw
Note: PIXEL-FORMAT is extracted from step 1.
View the image and see if it looks like the “upper-left” image you captured using nvarguscamerasrc.
If the image is still cropped, then the issue is most likely in the register table configuration of the driver.
If it looks fine under V4L2 but cropped under nvarguscamerasrc, then it’s more likely related to the Argus camera pipeline.
If you need any help for checking the register table or for testing, feel free to reach out for further support.
Best regards,
Nico
Embedded Software Engineer at ProventusNova
Here are the supported modes:
ls -l /dev/video0
crw-rw----+ 1 root video 81, 0 Nov 4 16:04 /dev/video0
v4l2-ctl --device=/dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
ls -l test2.raw
-rw-rw-r-- 1 hy hy 24514560 Nov 4 17:05 test2.raw
In fact the frame is 4032 x 3040 x 2 bytes, so clearly it captured in mode 0. I think that is the issue. I am getting the upper left because it is not sending data in 1920x1080.
From your output, we can confirm that the “upper-left” cropping is being done by nvarguscamerasrc after receiving a full 4032×3040 frame. This means the IMX477 sensor is still outputting the full resolution, so the issue is within the IMX477 driver rather than the Argus layer.
To debug further, you can add dev_info()line inside the imx477_set_mode() function of the driver to verify which mode index is actually being set. This logs are printed into dmesg. For example, for checking mode index:
When requesting resolution 1920x1080, the mode_index should be 1 which corresponds to IMX477_MODE_1920x1080_60FPS on file imx477_mode_tbls.h.
Additionally, I checked the DTB file. I noticed this is set: use_sensor_mode_id = "true";.
From NVIDIA documentation:
This is the reason why the --set-fmt-video command did not change the mode. The IMX477 driver does not implement a control for setting the mode via TEGRA_CAMERA_CID_SENSOR_MODE_ID. The driver then defaults into mode0 for capturing.
You can try changing this property in the device tree:
use_sensor_mode_id = "false";
and see if this fixes the issue. If the “upper-left” image still occurs, then the issue lies in the mode register table configuration.
Best regards,
Nico
Embedded Software Engineer at ProventusNova
Nico, I really appreciate your help on this. I wanted to let you know that I contacted Arducam support, and they were great. The really supported their product. We did a couple half-hour live video-conferenced debugging sessions where I demonstrated the problem using Google Meet, and they figured out that there was an issue with the .dtbo file (as you suspected, though I don’t believe it was the use_sensor_mode_id setting). They have updated their drivers online and I re-installed their drivers with the below, and now the 1920x1080 resolution is working!