IMX412 Orin Nano (P3768): IMX412 V4L2 raw capture succeeds, but nvargus-daemon fails with SymbolNotFound and PCL Open Failed (error 0x30009)

Setup & Environment:

  • Module: Jetson Orin Nano (P3767 family)

  • Carrier Board: Reference P3768 carrier board

  • Sensor: Sony IMX412 (utilizing an external 24 MHz local oscillator on a FRAMOS module)

  • Software Stack: Custom L4T / meta-tegra driver built on the tegracam framework

  • Linux jetson-orin-nano-devkit 5.15.185-l4t-r36.5-1033.33+g9c6d5c8154da #1 SMP PREEMPT Thu Feb 5 19:52:36 UTC 2026 aarch64 GNU/Linux

Description of the Issue:

The Sony IMX412 sensor probes cleanly in the kernel and registers at /dev/video0. Raw Bayer frame capture via v4l2-ctl works as expected.

However, nvargus-daemon fails to initialize the sensor pipeline. During initialization, the Point-Cloud/Platform Control Layer (PCL) parser fails to link the sensor node mode properties, resulting in repeated Error SymbolNotFound errors and NvPclStateControllerOpen: Failed ImagerGUID 1 (error 0x30009).

Steps to reproduce:

sudo gst-launch-1.0 -e nvarguscamerasrc sensor-id=0 num-buffers=1 !
‘video/x-raw(memory:NVMM), width=1280, height=720, format=NV12, framerate=30/1’ !
nvjpegenc ! filesink location=isp_output.jpg

sudo journalctl -u nvargus-daemon -f

jetson-orin-nano-devkit:~$ sudo journalctl -u nvargus-daemon -f
Jan 01 00:00:34 jetson-orin-nano-devkit systemd[1]: Started NVIDIA Argus daemon.
Jan 01 00:00:34 jetson-orin-nano-devkit nvargus-daemon[756]: === NVIDIA Libargus Camera Service (0.99.33)
Jan 01 00:00:34 jetson-orin-nano-devkit nvargus-daemon[756]: === Listening for connections...
Oct 14 11:19:43 jetson-orin-nano-devkit nvargus-daemon[756]: === gst-launch-1.0[949]: Connection established (FFFFAFDAB8C0)
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module1
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: NvPclHwGetModuleList: No module data found
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: OFParserGetVirtualDevice: NVIDIA Camera virtual enumerator not found in proc device-tree
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: (NvOdmDevice) Error SymbolNotFound:  (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2SensorViCsi.cpp, function loadModeProperties(), line 866)
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: (NvOdmDevice) Error SymbolNotFound:  (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2SensorViCsi.cpp, function loadModeList(), line 667)
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: (NvOdmDevice) Error SymbolNotFound:  (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2SensorViCsi.cpp, function initialize(), line 131)
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: NvPclDriverInitializeData: Unable to initialize driver v4l2_sensor
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: NvPclInitializeDrivers: error: Failed to init camera sub module v4l2_sensor
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: NvPclStartPlatformDrivers: Failed to start module drivers
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: NvPclStateControllerOpen: Failed ImagerGUID 1. (error 0x30009)
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: NvPclOpen: PCL Open Failed. Error: 0xf
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: SCF: Error BadParameter: Sensor could not be opened. (in src/services/capture/CaptureServiceDeviceSensor.cpp, function getSourceFromGuid(), line 725)
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: SCF: Error BadParameter:  (propagating from src/services/capture/CaptureService.cpp, function addSourceByGuid(), line 465)
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: SCF: Error BadParameter:  (propagating from src/api/CameraDriver.cpp, function addSourceByIndex(), line 384)
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: SCF: Error BadParameter:  (propagating from src/api/CameraDriver.cpp, function getSource(), line 556)
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: === gst-launch-1.0[949]: CameraProvider initialized (0xffffa8a41cd0)
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: === gst-launch-1.0[949]: CameraProvider destroyed (0xffffa8a41cd0)
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: CaptureService:stop: is requested --------------------------
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: === gst-launch-1.0[949]: Connection closed (FFFFAFDAB8C0)
Oct 14 11:19:44 jetson-orin-nano-devkit nvargus-daemon[756]: === gst-launch-1.0[949]: Connection cleaned up (FFFFAFDAB8C0)
^C

Other information:

jetson-orin-nano-devkit:~$ ls -l /var/nvidia/nvcam/settings/
-rw-r--r--    1 root     root           102 Mar  9  2018 README.txt
-rw-r--r--    1 root     root         90444 Oct  9 12:20 camera_overrides.isp
-rw-r--r--    1 root     root         90444 Oct  9 11:00 imx412_front_IRC650.isp

$ cat /proc/device-tree/tegra-camera-platform/modules/module1/badge
imx412_front_IRC650

$ cat /proc/device-tree/tegra-camera-platform/modules/module1/drivernode0/devname
imx412 9-001a


tegra-camera-platform {   
                vi_bw_margin_pct = <0x19>;
                max_lane_speed = <0x16e360>;
                vi_peak_byte_per_pixel = <0x02>;
                num_csi_lanes = <0x04>;
                max_pixel_rate = <0x2cb41780>;       
                compatible = "nvidia, tegra-camera-platform";
                min_bits_per_pixel = <0x0a>;
                isp_bw_margin_pct = <0x19>;          
                isp_peak_byte_per_pixel = <0x05>;
                                               
                modules {        
          
                        module1 {
                                badge = "imx412_front_IRC650";
                                position = "front";
                                orientation = "1"; 
                                  
                                drivernode0 {
                                        devname = "imx412 9-001a";
                                        pcl_id = "v4l2_sensor";
                                        sysfs-device-tree = "/sys/firmware/devicetree/base/bus@0/cam_i2cmux/i2c@1/imx412_mipi@1a";
                                };        
                        };
                };
        };             


The dts from the board is attached

The isp file is obtained from framos-jetson-drivers/isp/IMX412_IRC650.isp at l4t-r36.4.4 · framosimaging/framos-jetson-drivers · GitHub

Need the help to make the isp work.

Thanks and Regards,

Surajit

live.dts.gz (43.3 KB)

Dump the device tree to confirm it.

sudo dtc -I fs -O dts -o extracted_proc.dts /sys/firmware/devicetree/base

What’s the v4l2-ctl --list-devices shows.

I was referring to a similar problem from " No cameras available(gstnvarguscamerasrc.cpp, execute:751) - #14 by wyoung7222 "

Is the last reply from you relevant here ?

jetson-orin-nano-devkit:~$ v4l2-ctl --list-ctrls     

Camera Controls

                     group_hold 0x009a2003 (bool)   : default=0 value=0 flags=execute-on-write
                    sensor_mode 0x009a2008 (int64)  : min=0 max=1 step=1 default=0 value=0 flags=slider
                           gain 0x009a2009 (int64)  : min=16 max=257 step=1 default=16 value=16 flags=slider
                       exposure 0x009a200a (int64)  : min=10 max=1000001 step=1 default=2495 value=10 flags=slider
                     frame_rate 0x009a200b (int64)  : min=1500000 max=30000000 step=1 default=30000000 value=1500000 flags=slider
           sensor_configuration 0x009a2032 (u32)    : min=0 max=4294967295 step=1 default=0 dims=[22] flags=read-only, volatile, has-payload
         sensor_mode_i2c_packet 0x009a2033 (u32)    : min=0 max=4294967295 step=1 default=0 dims=[1026] flags=read-only, volatile, has-payload
      sensor_control_i2c_packet 0x009a2034 (u32)    : min=0 max=4294967295 step=1 default=0 dims=[1026] flags=read-only, volatile, has-payload
                    bypass_mode 0x009a2064 (intmenu): min=0 max=1 default=0 value=0 (0 0x0)
                override_enable 0x009a2065 (intmenu): min=0 max=1 default=0 value=0 (0 0x0)
                   height_align 0x009a2066 (int)    : min=1 max=16 step=1 default=1 value=1
                     size_align 0x009a2067 (intmenu): min=0 max=2 default=0 value=0 (1 0x1)
               write_isp_format 0x009a2068 (int)    : min=1 max=1 step=1 default=1 value=1
       sensor_signal_properties 0x009a2069 (u32)    : min=0 max=4294967295 step=1 default=0 dims=[30][18] flags=read-only, has-payload
        sensor_image_properties 0x009a206a (u32)    : min=0 max=4294967295 step=1 default=0 dims=[30][16] flags=read-only, has-payload
      sensor_control_properties 0x009a206b (u32)    : min=0 max=4294967295 step=1 default=0 dims=[30][36] flags=read-only, has-payload
              sensor_dv_timings 0x009a206c (u32)    : min=0 max=4294967295 step=1 default=0 dims=[30][16] flags=read-only, has-payload
               low_latency_mode 0x009a206d (bool)   : default=0 value=0
               preferred_stride 0x009a206e (int)    : min=0 max=65535 step=1 default=0 value=0
    override_capture_timeout_ms 0x009a206f (int)    : min=-1 max=2147483647 step=1 default=2500 value=2500
                   sensor_modes 0x009a2082 (int)    : min=0 max=30 step=1 default=30 value=1 flags=read-only

Regards,

Surajit

extracted_proc.dts.gz (43.3 KB)

The fatal line is:

V4L2SensorViCsi.cpp, function loadModeProperties(), line 866
NvPclStateControllerOpen: Failed ImagerGUID 1 (error 0x30009)

PCL is missing a required mode0 device-tree property. Your extracted DTS imx412_mipi@1a/mode0 has physical_w/h, mclk_khz, pix_clk_hz, line_length, and the gain/exposure/framerate limits, but it does not have:

min_hdr_ratio = "1";
max_hdr_ratio = "1";

Add both under mode0 (same as IMX219/IMX477 reference DT). For this non-HDR Bayer mode both should be "1". Rebuild/flash the DTB (or DTBO), reboot, then:

ls /proc/device-tree/bus@0/cam_i2cmux/i2c@1/imx412_mipi@1a/mode0/
cat /proc/device-tree/bus@0/cam_i2cmux/i2c@1/imx412_mipi@1a/mode0/min_hdr_ratio
sudo service nvargus-daemon restart
gst-launch-1.0 nvarguscamerasrc sensor-id=0 num-buffers=1 ! 'video/x-raw(memory:NVMM),width=1280,height=720,framerate=30/1,format=NV12' ! nvjpegenc ! filesink location=isp_output.jpg

NvPclHwGetModuleList: Could not map module to ISP config string is expected for a custom badge. It is not 0x30009. Keep imx412_front_IRC650.isp / camera_overrides.isp for after Argus can open the camera.

OFParserGetVirtualDevice: NVIDIA Camera virtual enumerator not found is also a common warning here and is not the PCL open failure.

Please attach the updated mode0 node if it still fails after those two properties are present in /proc/device-tree.

Hi Shane,

That worked :). I can use the command to capture a jpg file.

There are few observations however and some questions.

jetson-orin-nano-devkit:~$ sudo gst-launch-1.0 -e nvarguscamerasrc sensor-id=0 num-buffers=1 ! \
>   'video/x-raw(memory:NVMM), width=1280, height=720, format=NV12, framerate=30/1' ! \
>   nvjpegenc ! filesink location=isp_output.jpg
[  117.127606] imx412_open: V4L2 subdevice open called.

[  117.524396] nvgpu: 17000000.gpu                  gk20a_scale_init:541  [INFO]  enabled scaling for GPU
[  117.524396] 
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
[  119.408989] nvidia-modeset: Loading NVIDIA UNIX Open Kernel Mode Setting Driver for aarch64  540.5.0  Release Build  (@oivi-Legion-5-Pro-16ITH6H)  Fri Oct 16 09:41:58 AM UTC 2026
[  119.415110] [drm] [nvidia-drm] [GPU ID 0x00020000] Loading driver
[  119.415114] [drm] Initialized nvidia-drm 0.0.0 20160202 for 13800000.display on minor 1
[  119.678436] NVRM rpcRmApiControl_dce: NVRM_RPC_DCE: Failed RM ctrl call cmd:0x731341 result 0xffff:
[  119.679516] NVRM rpcRmApiControl_dce: NVRM_RPC_DCE: Failed RM ctrl call cmd:0x730282 result 0x1f:
CONSUMER: Waiting until producer is connected...
GST_ARGUS: Available Sensor modes :
GST_ARGUS: 1280 x 720 FR = 29.999999 fps Duration = 33333334 ; Analog Gain range min 1.000000, max 16.000000; Exposure Range min 10000, max 1000000000;

GST_ARGUS: Running with following settings:
   Camera index = 0 
   Camera mode  = 0 
   Output Stream W = 1280 H = 720 
   seconds to Run    = 0 
   Frame Rate = 29.999999 
GST_ARGUS: Setup Complete, Starting captures for 0 seconds
GST_ARGUS: Starting repeat capture requests.
CONSUMER: Producer has connected; continuing.
[  119.822336] imx412 9-001a: imx412_power_on: Powering ON IMX412 sensor...
[  119.822346] imx412 9-001a: imx412_power_on: Asserting RESET GPIO 492 (LOW)
[  119.833361] imx412 9-001a: imx412_power_on: De-asserting RESET GPIO 492 (HIGH)
[  119.844118] imx412 9-001a: imx412_power_on: Power ON sequence completed.
[  119.847025] imx412 9-001a: imx412_set_mode: Applying mode_index = 0
[  119.847028] imx412 9-001a: imx412_set_mode: Applying global config registors 
[  119.847029] imx412 9-001a: imx412_write_register_array: Writing register array (112 registers)...
[  119.873488] imx412 9-001a: imx412_write_register_array: Register array successfully written.
[  119.876120] imx412 9-001a: imx412_configure_xvs_mode: Default XVS mode active (0)
[  119.876125] imx412 9-001a: imx412_set_mode: Applying selected resolution mode registers
[  119.876128] imx412 9-001a: imx412_write_register_array: Writing register array (108 registers)...
[  119.920844] imx412 9-001a: imx412_write_register_array: Register array successfully written.
[  119.920864] imx412 9-001a: imx412_set_frame_rate: FPS=30 VTPXCK=480000000 Hz HMAX=2976 VMAX=5376 (0x1500)
[  119.920868] imx412 9-001a: imx412_start_streaming: Starting camera stream...
[  119.920870] imx412 9-001a: imx412_start_streaming: Restoring analog gain: 0x10
[  119.921007] imx412 9-001a: imx412_start_streaming: Restoring exposure: 0x8232
[  119.921142] imx412 9-001a: imx412_start_streaming: Writing STREAMING ON command (0x0100 -> 0x01)...
[  119.933285] imx412 9-001a: imx412_start_streaming: Stream ON successfully sent.
[  119.945296] imx412 9-001a: IMX412 0x0100 readback = 0x01, err=0
NvMMLiteBlockCreate : Block : BlockType = 1 
Redistribute latency...
Got EOS from element "pipeline0".
EOS received - stopping pipeline...
Execution ended after 0:00:01.012542720
Setting pipeline to NULL ...
GST_ARGUS: Cleaning up
ERROR: from element /GstPipeline:pipeline0/GstNvArgusCameraSrc:nvarguscamerasrc0: CANCELLED
Additional debug info:
Argus Correctable Error Status
ERROR: from element /GstPipeline:pipeline0/GstNvArgusCameraSrc:nvarguscamerasrc0: CANCELLED
Additional debug info:
Argus Correctable Error Status
ERROR: from element /GstPipeline:pipeline0/GstNvArgusCameraSrc:nvarguscamerasrc0: CANCELLED
Additional debug info:
Argus Correctable Error Status
[  120.414646] imx412 9-001a: imx412_stop_streaming: Stopping camera stream (0x0100 -> 0x00)...
[  120.416846] imx412 9-001a: imx412_power_off: Powering OFF IMX412 sensor...
[  120.416849] imx412 9-001a: imx412_power_off: Driving RESET GPIO 492 (LOW)
CONSUMER: Done Success
GST_ARGUS: Done Success
Freeing pipeline ...
jetson-orin-nano-devkit:~$ ls -l
-rw-r--r--    1 root     root         15102 Jan  1 00:06 isp_output.jpg
jetson-orin-nano-devkit:~$ 

This is the argus log

jetson-orin-nano-devkit:~$ sudo journalctl -u nvargus-daemon -f
Jan 01 00:04:17 jetson-orin-nano-devkit systemd[1]: Started NVIDIA Argus daemon.
Jan 01 00:04:17 jetson-orin-nano-devkit nvargus-daemon[760]: === NVIDIA Libargus Camera Service (0.99.33)
Jan 01 00:04:17 jetson-orin-nano-devkit nvargus-daemon[760]: === Listening for connections...
Jan 01 00:06:02 jetson-orin-nano-devkit nvargus-daemon[760]: === gst-plugin-scanner[811]: Connection established (FFFFA383B8C0)
Jan 01 00:06:02 jetson-orin-nano-devkit nvargus-daemon[760]: OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module1
Jan 01 00:06:02 jetson-orin-nano-devkit nvargus-daemon[760]: NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
Jan 01 00:06:02 jetson-orin-nano-devkit nvargus-daemon[760]: NvPclHwGetModuleList: No module data found
Jan 01 00:06:02 jetson-orin-nano-devkit nvargus-daemon[760]: OFParserGetVirtualDevice: NVIDIA Camera virtual enumerator not found in proc device-tree
Jan 01 00:06:02 jetson-orin-nano-devkit nvargus-daemon[760]: LSC: LSC surface is not based on full res!
Jan 01 00:06:02 jetson-orin-nano-devkit nvargus-daemon[760]: === gst-plugin-scanner[811]: CameraProvider initialized (0xffff9ca3f900)
Jan 01 00:06:02 jetson-orin-nano-devkit nvargus-daemon[760]: === gst-plugin-scanner[811]: CameraProvider destroyed (0xffff9ca3f900)
Jan 01 00:06:02 jetson-orin-nano-devkit nvargus-daemon[760]: CaptureService:stop: is requested --------------------------
Jan 01 00:06:03 jetson-orin-nano-devkit nvargus-daemon[760]: === gst-plugin-scanner[811]: Connection closed (FFFFA383B8C0)
Jan 01 00:06:03 jetson-orin-nano-devkit nvargus-daemon[760]: === gst-plugin-scanner[811]: Connection cleaned up (FFFFA383B8C0)
Jan 01 00:06:03 jetson-orin-nano-devkit nvargus-daemon[760]: === gst-launch-1.0[810]: Connection established (FFFFA383B8C0)
Jan 01 00:06:03 jetson-orin-nano-devkit nvargus-daemon[760]: OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module1
Jan 01 00:06:03 jetson-orin-nano-devkit nvargus-daemon[760]: NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
Jan 01 00:06:03 jetson-orin-nano-devkit nvargus-daemon[760]: NvPclHwGetModuleList: No module data found
Jan 01 00:06:03 jetson-orin-nano-devkit nvargus-daemon[760]: OFParserGetVirtualDevice: NVIDIA Camera virtual enumerator not found in proc device-tree
Jan 01 00:06:03 jetson-orin-nano-devkit nvargus-daemon[760]: LSC: LSC surface is not based on full res!
Jan 01 00:06:03 jetson-orin-nano-devkit nvargus-daemon[760]: === gst-launch-1.0[810]: CameraProvider initialized (0xffff9d68d630)
Jan 01 00:06:03 jetson-orin-nano-devkit nvargus-daemon[760]: LSC: LSC surface is not based on full res!
Jan 01 00:06:09 jetson-orin-nano-devkit nvargus-daemon[760]: PowerServiceCore:handleRequests: timePassed = 5087
Jan 01 00:06:09 jetson-orin-nano-devkit nvargus-daemon[760]: === gst-launch-1.0[810]: CameraProvider destroyed (0xffff9d68d630)
Jan 01 00:06:09 jetson-orin-nano-devkit nvargus-daemon[760]: CaptureService:stop: is requested --------------------------
Jan 01 00:06:10 jetson-orin-nano-devkit nvargus-daemon[760]: === gst-launch-1.0[810]: Connection closed (FFFFA383B8C0)
Jan 01 00:06:10 jetson-orin-nano-devkit nvargus-daemon[760]: === gst-launch-1.0[810]: Connection cleaned up (FFFFA383B8C0)

Questions:

  1. I still see some error like "ERROR: from element /GstPipeline:pipeline0/GstNvArgusCameraSrc:nvarguscamerasrc0: CANCELLED " what are these errors ?
  2. I still see the Warning that “Could not map module to ISP config string” , this come irrespective i keep the isp file under /var/nvidia/nvcam/settings or not. What is the significance of the isp file, how could I remove the warning ?
  3. I see some new file created under /var/nvidia/nvcam/settings, what are these files ?
jetson-orin-nano-devkit:~$ ls -l /var/nvidia/nvcam/settings 
-rw-r--r--    1 root     root           102 Mar  9  2018 README.txt
-rw-r--r--    1 root     root       1920604 Jan  1 00:06 nvcam_cache_1.bin
-rw-r--r--    1 root     root            16 Jan  1 00:06 serial_no_1.bin

Thanks and regards,

Surajit