Integrating UDDF Drivers with SIPL#
After you build your UDDF driver, you must make it discoverable by SIPL. This page covers driver configuration matching, the JSON configuration structure, and the library installation path that SIPL scans at startup.
Driver Configuration Matching#
SIPL uses a name-matching system to connect your drivers with camera
configurations. The DriverInfo.name in your driver code must exactly match
the corresponding name field in the platform’s SensorSystemConfig JSON files.
A GMSL driver library typically provides four driver types:
Camera module driver: Controls the camera module (sensor and serializer). SIPL matches this driver using
cameraConfigs[].moduleDriverNamewhen the field is present, otherwise usingcameraConfigs[].name.Deserializer driver: Controls the GMSL deserializer. SIPL matches this driver using
transportSettings[].deserInfo.name.Module power driver: Manages camera module power sequencing. SIPL matches this driver using
transportSettings[].powerControlInfo.moduleInfo.name.Deserializer power driver: Manages deserializer power sequencing. SIPL matches this driver using
transportSettings[].powerControlInfo.deserializerInfo.name.
In Your Driver Code#
Your driver library declares a DriverInfo structure for each driver it
provides. SIPL uses the name field to match your driver against the JSON
configuration:
static const ddi::DriverInfo g_moduleDriverInfo = {
.name = "SampleGmslModule",
.description = "A sample GMSL camera module driver",
.vendor = "NVIDIA Corporation",
.revision = "1.0.0"
};
static const ddi::DriverInfo g_deserDriverInfo = {
.name = "SampleGmslDeserializer",
.description = "A sample GMSL deserializer driver",
.vendor = "NVIDIA Corporation",
.revision = "1.0.0"
};
static const ddi::DriverInfo g_modulePowerDriverInfo = {
.name = "SampleModulePowerDriver",
.description = "A sample GMSL module power driver",
.vendor = "NVIDIA Corporation",
.revision = "1.0.0"
};
static const ddi::DriverInfo g_deserPowerDriverInfo = {
.name = "SampleDeserializerPowerDriver",
.description = "A sample GMSL deserializer power driver",
.vendor = "NVIDIA Corporation",
.revision = "1.0.0"
};
In Your SensorSystemConfig JSON#
The SensorSystemConfig JSON files define the camera and transport settings that SIPL uses to match against your driver names.
Camera Configuration#
The camera configuration defines the sensor, serializer, and link settings.
For GMSL, SIPL matches the camera module driver using moduleDriverName when
the field is present. If moduleDriverName is absent, SIPL falls back to the
top-level name field. The selected value must exactly match your camera
module driver’s DriverInfo.name:
{
"cameraConfigs": [
{
"name": "SampleGmslModule",
"moduleDriverName": "SampleGmslModule",
"type": "GMSL",
"description": "Sample RGGB GMSL Camera - 3840x2160 30FPS",
"serInfo": {
"name": "SerializerName",
"i2cAddress": "0x40"
},
"linkMode": "LINK_MODE_GMSL2_6GBPS",
"fsyncMode": "external",
"mipiSettings": {
"dphyRate": 1300000,
"phyMode": "dphy"
},
"sensorInfo": {
"name": "SampleSensor",
"description": "Sample RGGB Sensor for GMSL",
"i2cAddress": "0x1A",
"numContext": 1,
"virtualChannels": [
{
"cfa": "rggb",
"embeddedTopLines": 1,
"embeddedBottomLines": 20,
"inputFormat": "raw12",
"width": 3840,
"height": 2160,
"fps": 30.0,
"isEmbeddedDataTypeEnabled": false
}
]
},
"isEEPROMSupported": true
}
]
}
Transport Configuration#
The transport configuration defines the deserializer and power control settings.
Each name field must exactly match the corresponding driver’s
DriverInfo.name:
{
"transportSettings": [
{
"name": "transportSettings_AB",
"type": "GMSL",
"description": "GMSL transport settings for CSI-AB",
"csiPort": "csi-ab",
"phyMode": "dphy",
"deserInfo": {
"name": "SampleGmslDeserializer",
"i2cAddress": "0x29"
},
"powerControlInfo": {
"deserializerInfo": {
"name": "SampleDeserializerPowerDriver",
"gpioPinIndex": 7
},
"moduleInfo": {
"name": "SampleModulePowerDriver",
"i2cAddress": "0x27"
}
},
"i2cDevice": 9,
"desI2CPort": 9
}
]
}
Note
The following JSON fields must match the corresponding DriverInfo.name
values exactly:
cameraConfigs[].namemust match your camera module driver name.cameraConfigs[].moduleDriverNamemust match your camera module driver name when the field is present.cameraConfigs[].namemust match your camera module driver name whenmoduleDriverNameis absent.deserInfo.namemust match your deserializer driver name.powerControlInfo.deserializerInfo.namemust match your deserializer power driver name.powerControlInfo.moduleInfo.namemust match your module power driver name.
Warning
JetPack 7.2 migration: Driver names are case-sensitive. Module and transport
"name" fields in SensorSystemConfig JSON files are now matched
case-sensitively against the driver-exported DriverInfo.name. JSON
configs that worked on JetPack 7.1 with a different case (for example,
"vb1940" versus "VB1940") will fail to bind on JetPack 7.2. Update each
"name" field to match the exact case exported by the driver.
Note
Use moduleDriverName when multiple camera configuration names should
share one module driver and NITO. For example, the shipped
AR0234CS_HAWK_SINGLE_CAMERA and AR0234CS_HAWK_NON_STEREO configs
use moduleDriverName: "AR0234CS_HAWK", and VB1940_Stereo uses
moduleDriverName: "VB1940".
Driver Library Installation#
SIPL automatically discovers drivers from the following directories:
/usr/lib/nvsipl_drv
Configure your packaging scripts to install the compiled driver shared library
to the appropriate directory for your target OS. At startup, SIPL scans these
directories, loads each library, calls the uddf_discover_drivers() function,
and matches the returned driver names against your configuration files.
Warning
JetPack 7.2 ABI break: Rebuild UDDF drivers against JetPack 7.2 headers. The UDDF
interface UUIDs for IGmslDeserializer, IGmslModuleControl,
IGmslSerializer, and ICoEBridgeControl were bumped in JetPack 7.2. Drivers
compiled against JetPack 7.1 UUIDs will fail to load on JetPack 7.2 (the framework
will not match the interfaces they export). Rebuild every UDDF driver
against the JetPack 7.2 headers and re-install to /usr/lib/nvsipl_drv.