Hello,
We’re bringing up a custom camera driver for a Sony IMX567 sensor on L4T 35.3.1 and JP 5.1.1. We can stream frames with v4l2-ctl and read out the raw frames and can verify the test pattern and real imagery from the camera. The device name is correct and we can confirm with dmesg that the device name for the driver is imx567 2-0036
.
[ 120.558747] imx567 2-0036: imx567_probe()
[ 120.558769] imx567 2-0036: probing v4l2 sensor
Media-ctl output looks like this:
nvidia@tegra-ubuntu:~$ sudo media-ctl -p -d /dev/media0
Media controller API version 5.10.104
Media device information
------------------------
driver tegra-camrtc-ca
model NVIDIA Tegra Video Input Device
serial
bus info
hw revision 0x3
driver version 5.10.104
Device topology
- entity 1: 13e10000.host1x:nvcsi@15a00000- (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev0
pad0: Sink
<- "imx567 2-0036":0 [ENABLED]
pad1: Source
-> "vi-output, imx567 2-0036":0 [ENABLED]
- entity 4: imx567 2-0036 (1 pad, 1 link)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev1
pad0: Source
[fmt:SRGGB10_1X10/2448x2048 field:none colorspace:srgb]
-> "13e10000.host1x:nvcsi@15a00000-":0 [ENABLED]
- entity 6: vi-output, imx567 2-0036 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video0
pad0: Sink
<- "13e10000.host1x:nvcsi@15a00000-":1 [ENABLED
However, argus is unable to stream the camera. Instead it returns “No cameras found”
nvidia@tegra-ubuntu:~$ gst-launch-1.0 nvarguscamerasrc ! fakesink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, execute:751 No cameras available
Got EOS from element "pipeline0".
Execution ended after 0:00:00.008767191
Setting pipeline to NULL ...
Freeing pipeline ...
Setting SCF and PCL logs to 5 gives the following output:
root@tegra-ubuntu:/home/nvidia# /usr/sbin/nvargus-daemon
=== NVIDIA Libargus Camera Service (0.99.33)=== Listening for connections...=== gst-launch-1.0[3137]: Connection established (FFFFB7A2D900)OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module0
NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
NvPclHwGetModuleList: No module data found
OFParserGetVirtualDevice: NVIDIA Camera virtual enumerator not found in proc device-tree
---- imager: No override file found. ----
(NvOdmDevice) Error SymbolNotFound: (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2SensorViCsi.cpp, function loadModeProperties(), line 791)
(NvOdmDevice) Error SymbolNotFound: (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2SensorViCsi.cpp, function loadModeList(), line 578)
(NvOdmDevice) Error SymbolNotFound: (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2SensorViCsi.cpp, function initialize(), line 124)
NvPclDriverInitializeData: Unable to initialize driver v4l2_sensor
NvPclInitializeDrivers: error: Failed to init camera sub module v4l2_sensor
NvPclStartPlatformDrivers: Failed to start module drivers
NvPclStateControllerOpen: Failed ImagerGUID 0. (error 0x30009)
NvPclOpen: PCL Open Failed. Error: 0xf
SCF: Error BadParameter: Sensor could not be opened. (in src/services/capture/CaptureServiceDeviceSensor.cpp, function getSourceFromGuid(), line 689)
SCF: Error BadParameter: (propagating from src/services/capture/CaptureService.cpp, function addSourceByGuid(), line 453)
SCF: Error BadParameter: (propagating from src/api/CameraDriver.cpp, function addSourceByIndex(), line 333)
SCF: Error BadParameter: (propagating from src/api/CameraDriver.cpp, function getSource(), line 505)
=== gst-launch-1.0[3137]: CameraProvider initialized (0xffffb0531250)=== gst-launch-1.0[3137]: CameraProvider destroyed (0xffffb0531250)=== gst-launch-1.0[3137]: Connection closed (FFFFB7A2D900)=== gst-launch-1.0[3137]: Connection cleaned up (FFFFB7A2D900)^C
root@tegra-ubuntu:/home/nvidia# export enableCamScfLogs=5
root@tegra-ubuntu:/home/nvidia# export enableCamPclLogs=5
root@tegra-ubuntu:/home/nvidia# /usr/sbin/nvargus-daemon
=== NVIDIA Libargus Camera Service (0.99.33)=== Listening for connections...=== gst-launch-1.0[3180]: Connection established (FFFF847CF900)Thread 1 getting next capture
Thread 1 is waiting
Thread 2 getting next capture
Thread 2 is waiting
Thread 3 getting next capture
Thread 3 is waiting
Thread 4 getting next capture
Thread 4 is waiting
Thread 5 getting next capture
Thread 5 is waiting
Thread 6 getting next capture
Thread 6 is waiting
Thread 7 getting next capture
Thread 7 is waiting
Thread 8 getting next capture
Thread 8 is waiting
Thread 9 getting next capture
Thread 9 is waiting
Thread 10 getting next capture
Thread 10 is waiting
Thread 11 getting next capture
Thread 11 is waiting
Thread 12 getting next capture
Thread 12 is waiting
Starting services...
Worker thread IspHw frameComplete start
Worker thread CaptureScheduler checkFramePending start
Worker thread CaptureScheduler frameStart start
Worker thread V4L2CaptureScheduler checkCaptureComplete start
Worker thread V4L2CaptureScheduler issueCaptures start
Worker thread PS handleRequests start
getInstance: s_instance(0xffff7c57ae90)
getInstance: s_instance(0xffff7c57ae90)
subscribe: SensorType(gyroscope)
subscribe: create SensorType(gyroscope) sensor(0xffff7c40dbe0)
subscribe: SensorType(accelerometer)
subscribe: create SensorType(accelerometer) sensor(0xffff7c3ee070)
AC plugin not present: dlopen "acplugin.so", acplugin.so: cannot open shared object file: No such file or directory
Services are started
NvPclSetHotplugCallback: ++++++++++++++++++++++
---- Imager: Calibration blob file handling supported in this build ----
NvPclHwGetModuleList: OFParserListModules Succeeded
NvPclModuleListInitialize: numBuiltinModules 1 11
OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module0
NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
NvPclHwGetModuleList: No module data found
NvPclHwPrintModuleDefinition -- Name: imx567_rear_imx567
NvPclHwPrintModuleDefinition -- Position: 0
NvPclHwPrintModuleDefinition -- CalibrationData Found: 1
NvPclHwPrintCameraSubModule -- HwCamSubModule[0].Name: v4l2_sensor
NvPclHwPrintCameraSubModule -- HwCamSubModule[0].DevName: imx567 2-0036
NvPclHwGetModuleList: OFParserListModules Succeeded
NvPclModuleListInitialize: numBuiltinModules 1 22
NvPclModuleListInitialize: NvPclModule list[0]: imx567_rear_imx567 position 0 numBuiltinModules 1
NvPclHwScanExternalCameras -- adding video0 to discover list
NvPclModuleListInitialize: numPlugableModules 1 +++
NvPclHwScanExternalCameras -- adding video0 to discover list
NvPclHwAddModules isVirtual 1 ^^^^^^^^
NvPclHwScanExternalCameras -- adding video0 to discover list
NvPclHwAddModules isVirtual 1 ^^^^^^^^
NvPclHwAddModules isVirtual 0 ^^^^^^^^
NvPclHwAddModules isVirtual 0 ^^^^^^^^
NvPclModuleListInitialize: numPlugableModules 0 ---
getHotplugMonitor: Getting hotplug monitor instance
initializeHotplug++
hotPlugfunc ++
addWatch: Watch added wd='1'
CheckProcDTExists: INFO: accessing /proc/device-tree/tegra-virtual-camera-platform/modules; No such file or directory
OFParserGetVirtualDevice: NVIDIA Camera virtual enumerator not found in proc device-tree
setHotplugCallback: Registered new callback client
NvPclSetHotplugCallback: ----------------------
hotPlugfunc: reading from inotify FD, Thread waiting
numSources: numSources 1
numSources: numSources 1
numSources: numSources 1
getSource: index 0 and numSources 1
numSources: numSources 1
numSources: numSources 1
addSourceByIndex: index 0 and guid 0ud
NvPclOpen: ++++++++++++++++++++++
NvPclStateControllerOpen: Found GUID 0 match at index[0]
NvPclHwInitializeModule: allocate overrides pathname @ 0xffff7c4b4560
NvPclHwInitializeModule: allocate overrides pathname @ 0xffff7c5799b0
NvPclHwInitializeModule: allocate overrides pathname @ 0xffff7c548800
NvPclHwInitializeModule: allocate overrides pathname @ 0xffff7c4ba9e0
NvPclHwInitializeModule: allocate overrides pathname @ 0xffff7c5f72c0
NvPclHwInitializeModule: allocate overrides pathname @ 0xffff7c5f8350
LoadOverridesFile: looking for override file [/Calib/camera_override.isp] 1/16
CheckOverridesPermissions: stat(/Calib/camera_override.isp) call failed
LoadOverridesFile: looking for override file [/data/vendor/nvcam/settings/camera_overrides.isp] 2/16
CheckOverridesPermissions: stat(/data/vendor/nvcam/settings/camera_overrides.isp) call failed
LoadOverridesFile: looking for override file [/opt/nvidia/nvcam/settings/camera_overrides.isp] 3/16
CheckOverridesPermissions: stat(/opt/nvidia/nvcam/settings/camera_overrides.isp) call failed
LoadOverridesFile: looking for override file [/var/nvidia/nvcam/settings/camera_overrides.isp] 4/16
CheckOverridesPermissions: stat(/var/nvidia/nvcam/settings/camera_overrides.isp) call failed
LoadOverridesFile: looking for override file [/data/vendor/nvcam/camera_overrides.isp] 5/16
CheckOverridesPermissions: stat(/data/vendor/nvcam/camera_overrides.isp) call failed
LoadOverridesFile: looking for override file [/data/vendor/nvcam/settings/imx567_rear_imx567.isp] 6/16
CheckOverridesPermissions: stat(/data/vendor/nvcam/settings/imx567_rear_imx567.isp) call failed
LoadOverridesFile: looking for override file [/opt/nvidia/nvcam/settings/imx567_rear_imx567.isp] 7/16
CheckOverridesPermissions: stat(/opt/nvidia/nvcam/settings/imx567_rear_imx567.isp) call failed
LoadOverridesFile: looking for override file [/var/nvidia/nvcam/settings/imx567_rear_imx567.isp] 8/16
CheckOverridesPermissions: stat(/var/nvidia/nvcam/settings/imx567_rear_imx567.isp) call failed
---- imager: No override file found. ----
Imager: looking for override file [/mnt/factory/camera/factory.bin] 1/16
Imager: looking for override file [/Calib/factory.bin] 2/16
Imager: looking for override file [/Calib/calibration.bin] 3/16
Imager: looking for override file [(null)] 4/16
Imager: looking for override file [(null)] 5/16
Imager: looking for override file [(null)] 6/16
Imager: looking for override file [(null)] 7/16
Imager: looking for override file [(null)] 8/16
Imager: looking for override file [(null)] 9/16
Imager: looking for override file [(null)] 10/16
Imager: looking for override file [(null)] 11/16
Imager: looking for override file [(null)] 12/16
Imager: looking for override file [(null)] 13/16
Imager: looking for override file [(null)] 14/16
Imager: looking for override file [(null)] 15/16
Imager: looking for override file [(null)] 16/16
Imager: looking for override file [/data/vendor/nvcam/settings/factory.bin] 1/16
Imager: looking for override file [/data/vendor/nvcam/settings/imx567_rear_imx567.bin] 2/16
Imager: looking for override file [/opt/nvidia/nvcam/settings/imx567_rear_imx567.bin] 3/16
Imager: looking for override file [/var/nvidia/nvcam/settings/imx567_rear_imx567.bin] 4/16
Imager: looking for override file [(null)] 5/16
Imager: looking for override file [(null)] 6/16
Imager: looking for override file [(null)] 7/16
Imager: looking for override file [(null)] 8/16
Imager: looking for override file [(null)] 9/16
Imager: looking for override file [(null)] 10/16
Imager: looking for override file [(null)] 11/16
Imager: looking for override file [(null)] 12/16
Imager: looking for override file [(null)] 13/16
Imager: looking for override file [(null)] 14/16
Imager: looking for override file [(null)] 15/16
Imager: looking for override file [(null)] 16/16
NvPclCreateDriver: Found NvPcl Driver Hal dev_name match (v4l2_sensor)
NvPclCreateDriver: Found a Driver name match (v4l2_sensor)
NvPclConnectDrivers: hImager was NULL, creating new imager
NvPclInitializeDrivers: v4l2_sensor ++++++++++++++++++
OFDPropertyGetString: could not read property [devnode-bus]
OFDPropertyCopyToLong: could not read property [has-eeprom]
OFDPropertyGetString: could not read property [sync_sensor]
OFDPropertyGetString: could not read property [type]
loadSubType: Sensor type missing in DT, 206
OFDPropertyCopyToLong: could not read property [set_mode_delay_ms]
OFDPropertyCopyToLong: could not read property [mode0.vc_id]
OFDPropertyCopyToLongLong: could not read property [mode0.serdes_pix_clk_hz]
OFDPropertyCopyToFloat: could not read property [mode0.gain_step_pitch]
OFDPropertyCopyToLong: could not read property [mode0.mclk_khz]
(NvOdmDevice) Error SymbolNotFound: (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2SensorViCsi.cpp, function loadModeProperties(), line 791)
(NvOdmDevice) Error SymbolNotFound: (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2SensorViCsi.cpp, function loadModeList(), line 578)
(NvOdmDevice) Error SymbolNotFound: (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2SensorViCsi.cpp, function initialize(), line 124)
NvPclDriverInitializeData: Unable to initialize driver v4l2_sensor
NvPclInitializeDrivers: error: Failed to init camera sub module v4l2_sensor
NvPclStartPlatformDrivers: Failed to start module drivers
NvPclCloseModuleDrivers: deallocate/free overrides pathname @ 0xffff7c4ba9e0
NvPclCloseModuleDrivers: deallocate/free overrides pathname @ 0xffff7c5f72c0
NvPclCloseModuleDrivers: deallocate/free overrides pathname @ 0xffff7c5f8350
NvPclCloseModuleDrivers: deallocate/free overrides pathname @ 0xffff7c4b4560
NvPclCloseModuleDrivers: deallocate/free overrides pathname @ 0xffff7c5799b0
NvPclCloseModuleDrivers: deallocate/free overrides pathname @ 0xffff7c548800
NvPclStateControllerOpen: Failed ImagerGUID 0. (error 0x30009)
NvPclStateControllerClose: Module imx567_rear_imx567 closed
NvPclOpen: PCL Open Failed. Error: 0xf
NvPclClose: ++++++++++++++++++++++
NvPclClose: ----------------------
NvPclOpen: ----------------------
SCF: Error BadParameter: Sensor could not be opened. (in src/services/capture/CaptureServiceDeviceSensor.cpp, function getSourceFromGuid(), line 689)
SCF: Error BadParameter: (propagating from src/services/capture/CaptureService.cpp, function addSourceByGuid(), line 453)
SCF: Error BadParameter: (propagating from src/api/CameraDriver.cpp, function addSourceByIndex(), line 333)
SCF: Error BadParameter: (propagating from src/api/CameraDriver.cpp, function getSource(), line 505)
numSources: numSources 1
=== gst-launch-1.0[3180]: CameraProvider initialized (0xffff7c5f7de0)=== gst-launch-1.0[3180]: CameraProvider destroyed (0xffff7c5f7de0)Stopping services...
Worker thread CaptureScheduler frameStart stop
Worker thread CaptureScheduler checkFramePending stop
Worker thread IspHw frameComplete stop
Worker thread V4L2CaptureScheduler issueCaptures stop
Worker thread V4L2CaptureScheduler checkCaptureComplete stop
NvPclShutdown: ++++++++++++++++++++++
NvPclModuleListShutdown: Client still conntected, skipping shutdown
NvPclShutdown: ----------------------
Worker thread PS handleRequests stop
unsubscribe: SensorType(gyroscope)
unsubscribe: gyroscope sensor(0xffff7c40dbe0)
unsubscribe: SensorType(accelerometer)
unsubscribe: accelerometer sensor(0xffff7c3ee070)
Services are stopped
closeInstance: ms_instance((nil))
NvPclRemoveHotplugCallback: ++++++++++++++++++++++
getHotplugMonitor: Getting hotplug monitor instance
shutdownHotplug: Requesting thread exit
hotPlugfunc: Read 16 bytes from inotify FD
hotPlugfunc: A File was Modified 00008000 NAME : CREATE : 00000100, DELETE : 00000200 IGNORED : 00008000 CLOSE_WRITE : 00000008
hotPlugfunc: Exit thread
hotPlugfunc: close failure error: 'Bad file descriptor' (9)
hotPlugfunc --
shutdownHotplug -- : shutdown of hotplug is complete
Removed callback client
NvPclRemoveHotplugCallback: ----------------------
FiberScheduler: shutting down; 0 fibers still in map
FiberScheduler: thread 1 exiting
FiberScheduler: thread 9 exiting
FiberScheduler: thread 5 exiting
FiberScheduler: thread 10 exiting
FiberScheduler: thread 7 exiting
FiberScheduler: thread 11 exiting
FiberScheduler: thread 8 exiting
FiberScheduler: thread 12 exiting
FiberScheduler: thread 4 exiting
FiberScheduler: thread 6 exiting
FiberScheduler: thread 3 exiting
FiberScheduler: thread 2 exiting
FiberScheduler: thread 11 has been joined
FiberScheduler: thread 9 has been joined
FiberScheduler: thread 12 has been joined
FiberScheduler: thread 10 has been joined
FiberScheduler: thread 7 has been joined
FiberScheduler: thread 6 has been joined
FiberScheduler: thread 5 has been joined
FiberScheduler: thread 4 has been joined
FiberScheduler: thread 3 has been joined
FiberScheduler: thread 8 has been joined
FiberScheduler: thread 2 has been joined
FiberScheduler: thread 1 has been joined
=== gst-launch-1.0[3180]: Connection closed (FFFF847CF900)=== gst-launch-1.0[3180]: Connection cleaned up (FFFF847CF900)
And for reference, the device tree we’re using looks like this. Can confirm we have the correct devname here which seems to be the issue for multiple people before:
#define CAM0_RST_L TEGRA194_MAIN_GPIO(H, 3)
/ {
tegra-capture-vi {
num-channels = <1>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
imx567_vi_in0: endpoint {
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&imx567_csi_out0>;
};
};
};
};
host1x@13e00000 {
nvcsi@15a00000 {
num-channels = <1>;
#address-cells = <1>;
#size-cells = <0>;
channel@0 {
reg = <0>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
imx567_csi_in0: endpoint@0 {
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&imx567_imx567_out0>;
};
};
port@1 {
reg = <1>;
imx567_csi_out0: endpoint@1 {
remote-endpoint = <&imx567_vi_in0>;
};
};
};
};
};
};
gpio@2200000 {
camera-control-output-low {
gpio-hog;
output-low;
gpios = <CAM0_RST_L 0>;
label = "cam0-rst";
};
};
i2c@3180000 {
imx567_cam0: imx567_a@36 {
compatible = "nvidia,imx567";
reg = <0x36>; // todo... determine this
devnode = "video0";
reset-gpios = <&tegra_main_gpio CAM0_RST_L GPIO_ACTIVE_HIGH>;
physical_w = "6.68";
physical_h = "5.75";
sensor_model ="imx567";
post_crop_frame_drop = "0";
use_decibel_gain = "true";
delayed_gain = "true";
use_sensor_mode_id = "true";
limit_analog_gain = "false";
mode0 {/*mode IMX567_MODE_2472X2064_30FPS*/
num_lanes = "2";
tegra_sinterface = "serial_a";
phy_mode = "DPHY";
discontinuous_clk = "no";
dpcm_enable = "false";
cil_settletime = "0";
dynamic_pixel_bit_depth = "10";
csi_pixel_bit_depth = "10";
mode_type = "bayer";
pixel_phase = "rggb";
active_w = "2472";
active_h = "2064";
readout_orientation = "0";
line_length = "2472";
inherent_gain = "1";
pix_clk_hz = "118800000"; // 594 Mbps * 2 lanes / 10 bits/pix
gain_factor = "10";
min_gain_val = "0"; /* 0dB */
max_gain_val = "480"; /* 48dB */
step_gain_val = "1"; /* 0.1 */
default_gain = "0";
min_hdr_ratio = "1";
max_hdr_ratio = "1";
framerate_factor = "1000000";
min_framerate = "20300000"; /* 1.5 */
max_framerate = "20300000"; /* 30 */
step_framerate = "1";
default_framerate= "20300000";
exposure_factor = "1000000";
min_exp_time = "30"; /* us */
max_exp_time = "660000"; /* us */
step_exp_time = "1";
default_exp_time = "33334";/* us */
embedded_metadata_height = "1";
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
imx567_imx567_out0: endpoint {
port-index = <0>;
bus-width = <2>;
remote-endpoint = <&imx567_csi_in0>;
};
};
};
};
};
};
/ {
tegra-camera-platform {
compatible = "nvidia, tegra-camera-platform";
num_csi_lanes = <2>;
max_lane_speed = <1500000>;
min_bits_per_pixel = <10>;
vi_peak_byte_per_pixel = <2>;
vi_bw_margin_pct = <25>;
max_pixel_rate = <300000>;
isp_peak_byte_per_pixel = <5>;
isp_bw_margin_pct = <25>;
modules {
module0 {
status="okay";
badge = "imx567_rear_imx567";
position = "rear";
orientation = "0";
drivernode0 {
status="okay";
/* Declare PCL support driver (classically known as guid) */
pcl_id = "v4l2_sensor";
/* Driver v4l2 device name */
devname = "imx567 2-0036";
/* Declare the device-tree hierarchy to driver instance */
proc-device-tree = "/proc/device-tree/i2c@3180000/imx567_a@36";
};
};
};
};
};
What could be the issue here? Right now we have the driver as a loadable kernel module that we insmod
manually. nvargus_nvraw --lps
also does not show any cameras when /dev/video0
exists and we can stream with v4l2-ctl
. Boosting clocks also doesn’t change anything.
Any help would be much appreciated, thank you!