Skip to content

Peripheral Discovery

make87 supports a wide variety of hardware peripherals. These are automatically discovered at runtime using system APIs, device files, and network probing techniques.

Supported Peripheral Types

Peripheral Type Description Discovery Method
Camera USB, Raspberry Pi CSI, IP (ONVIF, SSDP), and GigE Vision cameras v4l2-ctl, lsusb, ONVIF/SSDP/GigE multicast discovery
Codec Hardware decoders/encoders (e.g. H.264/H.265) Identified by name in v4l2-ctl and codec support enumeration
ISP Devices with image signal processing (e.g. denoise, scale) Detected via v4l2-ctl --all feature parsing
GPIO GPIO chip and line info via Linux GPIO interface gpiodetect, gpioinfo, and /dev/gpiochip*
GPU NVIDIA, Jetson, and AMD GPUs nvidia-smi, /etc/nv_tegra_release, rocm-smi
I2C I2C bus adapters /sys/class/i2c-adapter, checks /dev/i2c-* nodes
Keyboard USB or embedded keyboards /proc/bus/input/devices with capability filtering
Mouse USB or embedded mice /proc/bus/input/devices with relative axis filtering
RealSense Intel RealSense USB cameras lsusb, matched vendor/product ID, udevadm, v4l2-ctl
GenericDevice Any /dev device not matched to a known type /dev directory scan, filters block/char devices not already seen

How Discovery Works

Peripheral discovery is automatic and continuously monitored in the background:

  • System calls like v4l2-ctl, gpiodetect, or nvidia-smi are executed if available.
  • Known device paths (e.g., /dev/video0, /dev/input/event*) are scanned.
  • Network discovery uses multicast probes (ONVIF, SSDP, GigE Vision).
  • RealSense cameras are matched via vendor/product ID and udevadm for serials.
  • Unrecognized devices in /dev are added as GenericDevice if they are block/char nodes.

System Requirements

The following tools are recommended for optimal peripheral auto-discovery. If these tools are not available, peripherals can still be manually mounted as GenericDevice types:

  • v4l2-ctl (v4l-utils package) - for camera and video device discovery
  • lsusb (usbutils package) - for USB device enumeration
  • gpioinfo/gpiodetect (gpiod package) - for GPIO interface discovery
  • nvidia-smi - for NVIDIA GPU detection and management

Manual Mounting Alternative

If these discovery tools are not installed, you can still access peripherals by mounting them manually as GenericDevice types in your application configuration. This requires knowing the specific /dev paths of your hardware.

Installation of Discovery Tools

Ubuntu/Debian

sudo apt-get update
sudo apt-get install v4l-utils usbutils gpiod

Fedora

sudo dnf install v4l-utils usbutils libgpiod-utils

CentOS/RHEL

sudo yum install v4l-utils usbutils libgpiod-utils

For NVIDIA GPU Support

Install NVIDIA drivers and tools according to your distribution's instructions. The nvidia-smi command should be available after proper NVIDIA driver installation.

Access Permissions

Access to many peripherals requires appropriate permissions:

  • video group membership for camera devices
  • input group membership for keyboard/mouse devices
  • gpio group membership for GPIO access
  • dialout group membership for serial devices

The make87 installation process automatically configures these permissions for the make87 user through udev rules and group memberships.

Network-Based Peripherals

  • IP cameras must be reachable over the local network (same subnet)
  • ONVIF cameras are discovered via multicast discovery protocols
  • GigE Vision cameras use their own discovery mechanism
  • Network discovery may take additional time during node startup

Vendor-Specific Devices

Some specialized devices may require additional setup:

  • Intel RealSense cameras require Intel RealSense SDK
  • Luxonis devices may need specific drivers or firmware
  • MyriadX accelerators require Intel OpenVINO toolkit

These devices will be detected as GenericDevice if their specific drivers are not available, allowing manual configuration in your applications.