Exporter Setup¶
Exporters run on physical hosts that have access to hardware (serial ports, JTAG cables, network connections, power control). They register their resources with the coordinator so that clients can discover and use them.
Resource Configuration¶
Each exporter needs a YAML file defining its resource groups. The group naming
convention is <BOARD>_<CHIP> to ensure consistency across exporters:
# resources.yaml for a VCU118+AD9081 setup
VCU118_AD9081:
NetworkService:
cls: NetworkService
address: "10.0.0.23"
username: "root"
RawSerialPort:
cls: RawSerialPort
port: "/dev/ttyUSB1"
speed: 115200
XilinxDeviceJTAG:
cls: XilinxDeviceJTAG
root_target: 1
microblaze_target: 3
bitstream_path: "ref/vcu118_ad9081/system_top.bit"
kernel_path: "ref/vcu118_ad9081/simpleImage.strip"
XilinxVivadoTool:
cls: XilinxVivadoTool
vivado_path: "/tools/Xilinx/2025.1/Vivado"
Using Templates¶
Standardized templates are provided in exporter_configs/templates/:
vcu118_ad9081.yaml- VCU118 with AD9081 transceiverrpi.yaml- Raspberry Pizcu102.yaml- ZCU102 SoC
These use Jinja2 variables that labgrid’s resource config loader can resolve.
Validating Configurations¶
Before deploying an exporter, validate the config:
python exporter_configs/validate.py resources.yaml
This checks:
YAML structure is valid
All resource classes are recognized
Required parameters are present
Running the Exporter¶
Note
Running the exporter reliably requires ser2net 4.6.1 on PATH
— the 4.6.0 build shipped in most distributions hangs on the
RFC2217 purge option. See Exporter Deployment for the
full host-setup procedure.
# Install the plugins on the exporter host
pip install -e ".[dev]"
# Start the exporter
labgrid-exporter \
-c <coordinator-host>:20408 \
-n my-lab-host \
resources.yaml
The exporter name (-n) must be unique across all exporters.
Setting Up Places¶
After an exporter registers its resources, create a place and add match patterns to bind resources to it. This can be done via the web dashboard or the API:
# Via labgrid-client
labgrid-client -x <coordinator>:20408 create vcu118-lab1
labgrid-client -x <coordinator>:20408 -p vcu118-lab1 add-match \
"my-lab-host/VCU118_AD9081/*"
labgrid-client -x <coordinator>:20408 -p vcu118-lab1 set-tags \
board=vcu118 chip=ad9081
# Or via the REST API
curl -X POST http://localhost:8000/api/places -d '{"name":"vcu118-lab1"}'
curl -X POST http://localhost:8000/api/places/vcu118-lab1/matches \
-d '{"pattern":"my-lab-host/VCU118_AD9081/*"}'
Group Naming Convention¶
Use consistent group names across all exporters:
Board |
Chip |
Group Name |
|---|---|---|
VCU118 |
AD9081 |
|
VCU118 |
AD9084 |
|
ZCU102 |
AD9081 |
|
Raspberry Pi CM4 |
(none) |
|
This enables reliable match patterns like */VCU118_AD9081/* that work
regardless of which exporter host the board is connected to.