How to Export USB Devices¶
This guide shows you how to make USB devices available in the board farm.
Device Manager Integration¶
not-my-board exports not only the currently plugged in USB device, but every
USB device, that appears on a specific USB port. For that to work,
not-my-board needs support from the device manager to get notified when a new
device appears.
Integration with udev¶
Most popular Linux distributions use udev as a device manager. To integrate
not-my-board create a new rules file:
# disable autoprobe
ACTION=="add|change", KERNEL=="usb", SUBSYSTEM=="subsystem", \
ATTR{drivers_autoprobe}="0"
ACTION=="add", SUBSYSTEM=="usb", \
RUN+="/usr/bin/systemd-cat -t not-my-board-uevent /usr/local/bin/not-my-board uevent --verbose '$devpath'"
Note
Drivers need to be loaded, before the device can be probed successfully. Make
sure this rules file comes after the driver loading rules file (by default
80-drivers.rules).
Then you need to reload the rules files and trigger the USB subsystem, to disable auto-probe.
$ sudo udevadm control --reload
$ sudo udevadm trigger /sys/bus/usb
Note
This change is permanent, you don’t need to repeat this after a reboot.
Integration with mdev¶
Some Linux distributions, like Alpine Linux, use mdev as a device manager by
default. To integrate not-my-board add a new rule to the mdev config file:
SUBSYSTEM=usb;DEVPATH=.;.* root:root 0600 @not-my-board uevent --verbose "$DEVPATH"
Make sure to put this rule after the MODALIAS driver loading rule and modify
the MODALIAS rule to continue with the other rules by prepending a -:
-$MODALIAS=.* root:root 0660 @modprobe -b "$MODALIAS"
Then disable auto-probe:
$ sudo sh -c 'echo 0 > /sys/bus/usb/drivers_autoprobe'
Exporting the Device¶
Before you can export the device, you need to find out the usbid of the
device. With udev you can monitor Kernel uevents while you plug in the device.
In the following example the usbid is 3-7:
$ sudo udevadm monitor --kernel --subsystem-match=usb
[...]
KERNEL[14386.901673] add /devices/pci0000:00/0000:00:14.0/usb3/3-7 (usb)
[...]
Alternatively you can check the Kernel logs with dmesg:
$ sudo dmesg | grep usb
[...]
[14386.747654] usb 3-7: new high-speed USB device number 18 using xhci_hcd
[...]
Now create the export description with the usbid of the USB device. If your
board has more than one USB interface, you can of course add them all:
port = 2192
[[parts]]
compatible = [ "example-board" ]
usb.usb0 = { usbid = "3-7" }
usb.usb-serial = { usbid = "3-8" }
Finally, use the export description to register the place in the board farm:
$ sudo not-my-board export http://<board-farm-address>:2092 /etc/not-my-board/export-descriptions/example.toml