R36.3: "No cameras available" when using GStreamer with nvarguscamerasrc

Hi there,

I am migrating the camera driver from R35.4 ro R36.3. The driver works fine on R35.4 but not works on R36.3.

It’s similar to this issue: Jetson Agx Orin R36.3 argus_camera:No cameras available
I have tried to remove the devname in device tree but the problem is still there.

Please see the screenshot below. GStreamer with nvarguscamerasrc doesn’t work, but v4l2-ctl works!

logs from nvargus-daemon:
ar0233raw.log (12.9 KB)

device tree:
ar0233raw-jp6-dts.txt (40.6 KB)

Hi,

For the camera basic functionality first needs to check the device and driver configuration.
You can reference to below program guide for the detailed information of device tree and driver implementation.
https://docs.nvidia.com/jetson/archives/r36.3/DeveloperGuide/SD/CameraDevelopment/SensorSoftwareDriverProgramming.html?highlight=programing#sensor-software-driver-programming

Please refer to Applications Using V4L2 IOCTL Directly by using V4L2 IOCTL to verify basic camera functionality.
https://docs.nvidia.com/jetson/archives/r36.3/DeveloperGuide/SD/CameraDevelopment/SensorSoftwareDriverProgramming.html?highlight=programing#to-run-a-v4l2-ctl-test

Once confirm the configure and still failed below link help to get log and some information and some tips for debug.
https://elinux.org/Jetson/l4t/Camera_BringUp#Steps_to_enable_more_debug_messages

Thanks!

Hi @carolyuu

Sorry, I think your reply is not helpful because I already knew how to program and debug the camera driver.
Actually, I have successfully migrated the other YUV format camera from R35.4 to R36.3.
My problem now is for Bayer format camera which not works when using nvarguscamerasrc.

If you can point out what’s the differences between R35.4 and R36.3, and why does the nvarguscamerasrc not work, that will be very helpful.
Thank you.

hello ting.chang,

here’re several questions.

(1) could you please also execute below to check the supported formats.
$ v4l2-ctl -d /dev/video0 --list-formats-ext

(2) it looks you’re having multi-camera setup, did you had all 8 cameras connected to system before testing?

(3) please refer to Sensor Pixel Clock section, and please double check pix_clk_hz property settings since it must be set correctly to avoid potential issues.

(4) BTW, please also give it a try with below commands to boost all the VI/CSI/ISP clocks for verification.

sudo su
echo 1 > /sys/kernel/debug/bpmp/debug/clk/vi/mrq_rate_locked
echo 1 > /sys/kernel/debug/bpmp/debug/clk/isp/mrq_rate_locked
echo 1 > /sys/kernel/debug/bpmp/debug/clk/nvcsi/mrq_rate_locked
echo 1 > /sys/kernel/debug/bpmp/debug/clk/emc/mrq_rate_locked
cat /sys/kernel/debug/bpmp/debug/clk/vi/max_rate |tee /sys/kernel/debug/bpmp/debug/clk/vi/rate
cat /sys/kernel/debug/bpmp/debug/clk/isp/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/isp/rate
cat /sys/kernel/debug/bpmp/debug/clk/nvcsi/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/nvcsi/rate
cat /sys/kernel/debug/bpmp/debug/clk/emc/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/emc/rate

=> I already post the screenshot in the beginning. Here you are:

$ v4l2-ctl -d /dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
	Type: Video Capture

	[0]: 'RG12' (12-bit Bayer RGRG/GBGB)
		Size: Discrete 2048x1280
			Interval: Discrete 0.033s (30.000 fps)

=> The device tree is for 8 cameras but the problem happens even when there is only one camera connected.

=> For the value of pix_clk_hz and serdes_pix_clk_hz, I use the same value as R35.4 and it works well. Are there any reasons I have to modify the value on R36.3?

=> The problem is still there after boost.

hello ting.chang,

let’s narrow down the issue,
it’s likely that nvarguscamerasrc sensor-id=0 did not select the physical camera you’ve connected.
for instance,
please check you’ve camera (i.e. cam0) well connected to your system.

          cam0 {
            status = "okay";
            compatible = "leopard,ar0233";

and, please leave only this camera node in the tegra-camera-platform{} for testing.

          modules {
            camera_module0: module0 {
              status = "okay";
              badge = "ar0233_rear_liar0233";
              position = "rear";
              orientation = "1";
              drivernode0 {
                status = "okay";
                pcl_id = "v4l2_sensor";
                // devname = "ar0233 30-005b";
                proc-device-tree = "/proc/device-tree/bus@0/i2c@c250000/tca9546@70/i2c@0/cam0";

besides, for testing sensor stream.
you may try exclude all other elements by preview disabled and shows frame-rate only
for example,
$ gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! 'video/x-raw(memory:NVMM),width=2048, height=1280, framerate=30/1, format=NV12' ! nvvidconv ! fpsdisplaysink text-overlay=0 name=sink_0 video-sink=fakesink sync=0 -v

I have resolved the issue on my own. In JetPack 6 (R36.3), it is necessary to use sysfs-device-tree instead of proc-device-tree in the camera DTS. Additionally, use /sys/firmware/devicetree/base/xxx instead of the symbolic path /proc/device-tree/xxx. It is also essential to remove devname from the camera DTS.

For those looking to port the camera DTS from JetPack 5 to JetPack 6, I have summarized my experiences below:

  1. Path Changes: Some paths have changed. For example, /i2c@xxxxx and /host1x@13e00000 have been changed to /bus@0/i2c@xxxxx and /bus@0/host1x@13e00000.

  2. Remove devname: Ensure to remove devname in drivernode0{}.

  3. Use sysfs-device-tree: Replace proc-device-tree with sysfs-device-tree in drivernode0{}.

  4. Update Paths: Use /sys/firmware/devicetree/base/xxx instead of the symbolic path /proc/device-tree/xxx.

1 Like

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