Custom CAN plugin registration and invoke in application layer failing

Please provide the following info (tick the boxes after creating this topic):
Software Version
[*] DRIVE OS 6.0.10.0
DRIVE OS 6.0.8.1
DRIVE OS 6.0.6
DRIVE OS 6.0.5
DRIVE OS 6.0.4 (rev. 1)
DRIVE OS 6.0.4 SDK
other

Target Operating System
[*] Linux
QNX
other

Hardware Platform
[*] DRIVE AGX Orin Developer Kit (940-63710-0010-300)
DRIVE AGX Orin Developer Kit (940-63710-0010-200)
DRIVE AGX Orin Developer Kit (940-63710-0010-100)
DRIVE AGX Orin Developer Kit (940-63710-0010-D00)
DRIVE AGX Orin Developer Kit (940-63710-0010-C00)
DRIVE AGX Orin Developer Kit (not sure its number)
other

SDK Manager Version
2.1.0
other

Host Machine Version
native Ubuntu Linux 20.04 Host installed with SDK Manager
[*] native Ubuntu Linux 20.04 Host installed with DRIVE OS Docker Containers
native Ubuntu Linux 18.04 Host installed with DRIVE OS Docker Containers
other

Issue Description
I have created a custom plugin implementation using DW APIs, to follow sensor lifecycle management and exported the dwSensorCANPluginFunctionTable to be used by a custom monitor application.

Error String
[PLUGIN] specific logs are missing, which means my plugin isnt being used by the application, although sensorFactory() confirms the loading of the plugin.

Logs

root@6.0.10.0-0009-build-linux-sdk:/home/nvidia/build-x86_64-linux-gnu/install/usr/local/driveworks/samples/bin# ./sample_sygnalpomo_interpreter --driver=can.socket --params="device=vcan0,bitrate=500000" --plugin-path="./libsygnalpomo_can_plugin.so"
[INFO] Driver: can.socket
[INFO] Params: device=vcan0,bitrate=500000
[INFO] Plugin Path: ./libsygnalpomo_can_plugin.so
[19-02-2025 14:18:40] Platform: Detected Generic x86 Platform
[19-02-2025 14:18:40] Adding variable DW_Base:DW_Version
[19-02-2025 14:18:40] Added variable DW_Base:DW_Version
[19-02-2025 14:18:40] Platform: number of GPU devices detected 1
[19-02-2025 14:18:40] Platform: currently selected GPU device 0, Resource Data Dir: trt_08_06_12_04, Arch: ga1xx-discrete
[19-02-2025 14:18:40] Platform: currently selected GPU device discrete ID 0
[19-02-2025 14:18:40] Context::mountResourceCandidateDataPath resource FAILED to mount from './resources': VirtualFileSystem: Failed to mount './resources/resources.pak'
[19-02-2025 14:18:40] Context::mountResourceCandidateDataPath resource FAILED to mount from '/home/nvidia/build-x86_64-linux-gnu/install/usr/local/driveworks/samples/bin/data': VirtualFileSystem: Failed to mount '/home/nvidia/build-x86_64-linux-gnu/install/usr/local/driveworks/samples/bin/data/resources.pak'
[19-02-2025 14:18:40] Context::findDataRootInPathWalk data/DATA_ROOT found at: /usr/local/driveworks-5.20/data
[19-02-2025 14:18:40] Context::mountResourceCandidateDataPath resource FAILED to mount from '/usr/local/driveworks-5.20/data': VirtualFileSystem: Failed to mount '/usr/local/driveworks-5.20/data/resources.pak'
[19-02-2025 14:18:40] Context::findDataRootInPathWalk data/DATA_ROOT found at: /usr/local/driveworks-5.20/data
[19-02-2025 14:18:40] Context::mountResourceCandidateDataPath resource FAILED to mount from '/usr/local/driveworks-5.20/data': VirtualFileSystem: Failed to mount '/usr/local/driveworks-5.20/data/resources.pak'
[19-02-2025 14:18:40] Context::findResourcesPackageInPathWalk: Could not find ./resources/resources.pak in upto 7 parent directories from /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libdw_base.so.5.20
[19-02-2025 14:18:40] Context::findResourcesPackageInPathWalk: Could not find ./resources/resources.pak in upto 7 parent directories from /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libdw_base.so.5.20
[19-02-2025 14:18:40] SDK: No resources(.pak) mounted, some modules will not function properly
[19-02-2025 14:18:40] [19-02-2025 14:18:40] Initialize DriveWorks SDK v5.20.24
[19-02-2025 14:18:40] [19-02-2025 14:18:40] Release build with GNU 9.3.0 from buildbrain-branch-0-gb4c0b405b15
[19-02-2025 14:18:40] SensorFactory::loadPluginLibraryHelper:Succeed to load dynamic lib - /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libsensor_plugin_public_radar.so
[19-02-2025 14:18:40] SensorFactory::createSensor() -> can.socket, device=vcan0,bitrate=500000,decoder-path=./libsygnalpomo_can_plugin.so
[19-02-2025 14:18:40] Found driver: can.socket
[19-02-2025 14:18:40] CANSocket: Cannot get current state of hardware time stamping: ioctl(SIOCGHWTSTAMP, vcan0) -> Operation not supported
[19-02-2025 14:18:40] CANSocket: software based timestamps will be used for vcan0
[19-02-2025 14:18:40] CANSocket: ioctl(SIOCSHWTSTAMP, vcan0) failed -> Operation not supported. Cannot enable HW timestamps, try with root user.
[19-02-2025 14:18:40] CANSocket: use SW based timestamps for vcan0
[19-02-2025 14:18:40] CANSocket: started vcan0
[INFO] Monitoring CAN messages...
[APP] Received CAN message - ID: 0x170 | Data: 1 0 0 0 0 0 0 22 
[APP] Received CAN message - ID: 0x60 | Data: 1 0 1 0 0 0 0 bd 

I need to know how the application can be linked to the plugin to perform the decoding or where is the linkage broken?

a dependency list of the shared object created :

root@6.0.10.0-0009-build-linux-sdk:/home/nvidia/build-x86_64-linux-gnu/install/usr/local/driveworks/samples/bin# ldd libsygnalpomo_can_plugin.so
	linux-vdso.so.1 (0x00007ffc7b7cc000)
	libdw_sensors.so.5.20 => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libdw_sensors.so.5.20 (0x00007f69ac299000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f69ac09a000)
	libgcc_s.so.1 => /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f69ac07f000)
	libc.so.6 => /usr/lib/x86_64-linux-gnu/libc.so.6 (0x00007f69abe8d000)
	libnvsipl.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvsipl.so (0x00007f69abbf2000)
	libdl.so.2 => /usr/lib/x86_64-linux-gnu/libdl.so.2 (0x00007f69abbec000)
	libz.so.1 => /usr/lib/x86_64-linux-gnu/libz.so.1 (0x00007f69abbd0000)
	libnvcuvid.so.1 => /usr/lib/x86_64-linux-gnu/libnvcuvid.so.1 (0x00007f69aac95000)
	libnvsipl_query.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvsipl_query.so (0x00007f69aaa22000)
	libnvjpeg.so.11 => /usr/local/cuda/targets/x86_64-linux/lib/libnvjpeg.so.11 (0x00007f69aa331000)
	libdw_base.so.5.20 => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libdw_base.so.5.20 (0x00007f69a8db6000)
	libnvmedia_ide_sci.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvmedia_ide_sci.so (0x00007f69a8ba9000)
	libnvmedia_iep_sci.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvmedia_iep_sci.so (0x00007f69a899a000)
	libnvrm_surface_fusa.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvrm_surface_fusa.so (0x00007f69a8796000)
	libnvvideo_iep.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvvideo_iep.so (0x00007f69a851f000)
	libdwshared.so.5.20 => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libdwshared.so.5.20 (0x00007f69a8136000)
	libnvscisync.so.1 => /usr/lib/x86_64-linux-gnu/libnvscisync.so.1 (0x00007f69a7c82000)
	libnvscibuf.so.1 => /usr/lib/x86_64-linux-gnu/libnvscibuf.so.1 (0x00007f69a7a11000)
	libcudart.so.11.0 => /usr/local/cuda/targets/x86_64-linux/lib/libcudart.so.11.0 (0x00007f69a776f000)
	libcuda.so.1 => /usr/lib/x86_64-linux-gnu/libcuda.so.1 (0x00007f69a47bc000)
	libdwdynamicmemory.so.5.20 => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libdwdynamicmemory.so.5.20 (0x00007f69a47b7000)
	libpthread.so.0 => /usr/lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f69a4794000)
	libm.so.6 => /usr/lib/x86_64-linux-gnu/libm.so.6 (0x00007f69a4643000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f69add29000)
	libnvsipl_devblk.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvsipl_devblk.so (0x00007f69a440f000)
	libnvfusacap.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvfusacap.so (0x00007f69a41cf000)
	libnvsipl_devblk_cdi.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvsipl_devblk_cdi.so (0x00007f69a3fc7000)
	libnvsocsys.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvsocsys.so (0x00007f69a3dc3000)
	libnvos.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvos.so (0x00007f69a3bb4000)
	libnvsipl_control.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvsipl_control.so (0x00007f69a395a000)
	libnvrm_mem.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvrm_mem.so (0x00007f69a3755000)
	libnvrm_host1x.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvrm_host1x.so (0x00007f69a354d000)
	libnvrm_surface.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvrm_surface.so (0x00007f69a3339000)
	libnvrm_chip.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvrm_chip.so (0x00007f69a3136000)
	libnvsciemu.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvsciemu.so (0x00007f69a2f2f000)
	libnvemu.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvemu.so (0x00007f69a2c8c000)
	librt.so.1 => /usr/lib/x86_64-linux-gnu/librt.so.1 (0x00007f69a2c82000)
	libusb-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libusb-1.0.so.0 (0x00007f69a2c66000)
	libnvvideo.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvvideo.so (0x00007f69a29b8000)
	libnvrm_stream.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvrm_stream.so (0x00007f69a27af000)
	libgnarl-24.1.so => /usr/lib/x86_64-linux-gnu/libgnarl-24.1.so (0x00007f69a2755000)
	libgnat-24.1.so => /usr/lib/x86_64-linux-gnu/libgnat-24.1.so (0x00007f69a2228000)
	libnvscicommon.so.1 => /usr/lib/x86_64-linux-gnu/libnvscicommon.so.1 (0x00007f69a2022000)
	libnvsciipc.so => /usr/lib/x86_64-linux-gnu/libnvsciipc.so (0x00007f69a1e03000)
	libnvsipl_devblk_ddi.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvsipl_devblk_ddi.so (0x00007f69a1bee000)
	libnvsipl_devblk_crypto.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvsipl_devblk_crypto.so (0x00007f69a19e9000)
	libnvisppg.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvisppg.so (0x00007f69a16dd000)
	libnvrm_sync.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvrm_sync.so (0x00007f69a14d9000)
	libudev.so.1 => /usr/lib/x86_64-linux-gnu/libudev.so.1 (0x00007f69a14aa000)
	libnvisp.so => /usr/local/driveworks-5.20/targets/x86_64-Linux/lib/libnvisp.so (0x00007f69a122c000)
root@6.0.10.0-0009-build-linux-sdk:/home/nvidia/build-x86_64-linux-gnu/install/usr/local/driveworks/samples/bin# 


solved by initialting a pluginHandle and pluginFunctionTable pointer and parsing params to the plugin main.

1 Like

Glad to see the you were able to debug the issue.

1 Like