Command Line Interface

adidtc is the CLI for pyadi-dt. It provides commands for inspecting device trees on live hardware, generating device tree source files from Vivado XSA designs or board class configurations, and managing boot files on remote boards.

pip install adidt          # core commands
pip install "adidt[xsa]"   # adds xsa2dt and profile commands

Command Overview

Commands are grouped into three workflows:

Inspect device trees

Read, search, and modify device tree properties on live hardware (local or remote over SSH) or from a .dtb file.

prop

Get or set properties on a single node. Supports lookup by node name or compatible string.

adidtc -c remote_sysfs -i 192.168.2.1 prop -cp adi,ad9361
adidtc prop axi_ad9144_jesd compatible
props

Like prop, but supports hierarchical navigation through nested nodes by specifying multiple node names as a path.

adidtc props amba axi_ad9144_jesd -p compatible
adidtc -c local_file -f devicetree.dtb props amba spi0
deps

Analyze #include / /include/ dependencies in a .dts file. Outputs a tree, GraphViz DOT, or JSON.

adidtc deps overlay.dts
adidtc deps overlay.dts --format dot -o deps.dot

Generate device trees

Produce .dts files from Vivado XSA designs, board class + solver configs, or profile wizard exports.

xsa2dt

Run the full 5-stage XSA pipeline (sdtgen, parse, build, merge, report). Requires sdtgen (lopper) on PATH.

adidtc xsa2dt -x design.xsa -c config.json -o out/
adidtc xsa2dt -x design.xsa -c config.json --profile ad9081_zcu102 --lint
gen-dts

Generate DTS from a board class and JSON config (pyadi-jif solver output). No Vivado or XSA required.

adidtc gen-dts -b daq2 -p zcu102 -c solver_config.json
adidtc gen-dts -b ad9081_fmc -p vpk180 -c config.json --compile
profile2dt

Generate DTS from Transceiver Evaluation Software profile wizard exports. Currently supports ADRV9009.

adidtc -b adrv9009_pcbz profile2dt --profile profile.json --config talise_config.c
jif

Apply pyadi-jif solver output to update clock parameters in a live device tree.

adidtc -c remote_sysfs -i 192.168.2.1 jif clock -f solved_clocks.json

Manage boards and profiles

List supported boards, browse XSA profiles, and deploy boot files.

kuiper-boards

List all boards from the ADI Kuiper Linux manifest with their device tree generation support status (full, profile_only, unsupported).

adidtc kuiper-boards
adidtc kuiper-boards --status full
adidtc kuiper-boards --json-output
xsa-profiles

List built-in XSA board profiles available for xsa2dt --profile.

adidtc xsa-profiles
xsa-profile-show

Print the full JSON contents of a built-in XSA profile.

adidtc xsa-profile-show ad9081_zcu102
sd-move

Switch the active reference design on a remote SD card.

adidtc -c remote_sd -i 192.168.2.1 sd-move daq2
sd-remote-copy

Copy local boot files to a remote SD card over the network.

adidtc -c remote_sd -i 192.168.2.1 sd-remote-copy BOOT.BIN,system.dtb

Global Options

Every command inherits global options that control how adidtc connects to the target:

Option

Default

Description

--context / -c

local_sysfs

Access method: local_sysfs (read /proc/device-tree), remote_sysfs (SSH), local_sd / remote_sd (SD card mount), local_file (read a .dtb directly)

--board / -b

adrv9009_pcbz

Board configuration for commands that need board-specific metadata

--ip / -i

192.168.2.1

IP address for remote contexts

--username / -u

root

SSH username for remote contexts

--password / -w

analog

SSH password for remote contexts

--arch / -a

auto

Target architecture (arm, arm64, auto)

--filepath / -f

devicetree.dtb

Path to DTB file for local_file context

--no-color / -nc

off

Disable Rich formatting and color output

CLI Reference

Full auto-generated reference for all commands and options:

adidtc

ADI device tree utility for inspecting, generating, and modifying Linux device trees for Analog Devices hardware.

adidtc provides commands grouped into three workflows:
Inspect — Read and modify DT properties on live or local hardware
(prop, props, deps)
Generate — Produce device tree source from Vivado XSA files, board
class configs, or profile wizard exports
(xsa2dt, gen-dts, profile2dt, jif)
Manage — List supported boards, profiles, and deploy boot files
to SD cards (kuiper-boards, xsa-profiles, xsa-profile-show,
sd-move, sd-remote-copy)
Global options control how adidtc connects to the target board. The
–context flag selects the access method: local_sysfs reads /proc/device-tree
on the current machine, remote_sysfs reads over SSH, and the sd variants
mount an SD card partition. Use local_file to work on a .dtb file directly.
Examples:
List all nodes on a remote board:
adidtc -c remote_sysfs -i 192.168.2.1 prop
Generate a device tree from an XSA:
adidtc xsa2dt -x design.xsa -c config.json -o out/
Generate DTS from a board class config:
adidtc gen-dts -b daq2 -p zcu102 -c solver_config.json

Usage

adidtc [OPTIONS] COMMAND [ARGS]...

Options

-nc, --no-color

Disable formatting

-b, --board <board>

Set board configuration

Default:

'adrv9009_pcbz'

Options:

ad9081_fmc | adrv9009_pcbz | adrv9009_zu11eg | adrv9361_z7035 | adrv9364_z7020 | daq2

-c, --context <context>

Set context

Default:

'local_sysfs'

Options:

local_file | local_sd | local_sysfs | remote_sysfs | remote_sd

-i, --ip <ip>

Set ip used by remote contexts

Default:

'192.168.2.1'

-u, --username <username>

Set username used by remote SSH sessions (default is root)

Default:

'root'

-w, --password <password>

Set password used by remote SSH sessions (default is analog)

Default:

'analog'

-a, --arch <arch>

Set target architecture which will set the target DT. auto with determine from running system

Default:

'auto'

Options:

arm | arm64 | auto

-f, --filepath <filepath>

Path of the target devicetree blob to be used in local_file mode (default is devicetree.dtb)

Default:

'devicetree.dtb'

deps

Analyze and visualize device tree include dependencies.

Parses a device tree source file and builds a dependency graph from
its #include and /include/ directives. Detects circular dependencies,
missing headers, and transitive include chains. Outputs as a tree
(terminal), GraphViz DOT (for diagrams), or JSON (for scripting).
DT_FILE - Path to device tree source file (.dts, .dtsi)
Examples:
View the full dependency tree:
adidtc deps system.dts
Limit the tree to 3 levels deep:
adidtc deps system.dts –max-depth 3
Hide missing dependencies from the output:
adidtc deps system.dts –hide-missing
Export to GraphViz and generate a PNG image:
adidtc deps system.dts –format dot -o deps.dot
dot -Tpng deps.dot -o deps.png
Export to JSON for scripting:
adidtc deps system.dts –format json -o deps.json
Save tree output to a file:
adidtc deps system.dts -o deps.txt

Usage

adidtc deps [OPTIONS] DT_FILE

Options

-f, --format <format>

Output format (tree, json, or dot)

Options:

tree | json | dot

-d, --max-depth <max_depth>

Maximum depth to display in tree format

--show-missing, --hide-missing

Show or hide missing dependencies

-o, --output <output>

Output file (for json/dot formats)

Arguments

DT_FILE

Required argument

gen-dts

Generate device tree source from a board class and JSON configuration.

Runs the BoardModel workflow: load a JSON config (typically from
pyadi-jif solver output), instantiate a board class, call
to_board_model() to build the model, then render to DTS via Jinja2
templates. Optionally compiles the DTS to DTB using dtc.
The config JSON should contain clock and JESD204 parameters as
produced by pyadi-jif’s solver. See the board_class_workflow
documentation for the expected JSON structure.
Supported boards: daq2, ad9081_fmc, ad9082_fmc, ad9083_fmc,
ad9084_fmc, adrv9002_fmc, adrv9008_fmc, fmcomms_fmc, adrv9009_fmc,
adrv9025_fmc, adrv937x_fmc.
Examples:
Generate DTS for FMCDAQ2 on ZCU102:
adidtc gen-dts -b daq2 -p zcu102 -c solver_config.json
Generate DTS for AD9081 FMC on VPK180:
adidtc gen-dts -b ad9081_fmc -p vpk180 -c config.json
Generate and compile to DTB:
adidtc gen-dts -b adrv9009_fmc -p zcu102 -c cfg.json –compile
Custom output path:
adidtc gen-dts -b daq2 -p zc706 -c cfg.json -o custom.dts
Specify a Linux kernel source tree for include paths:
adidtc gen-dts -b ad9081_fmc -p zcu102 -c cfg.json -k /path/to/linux

Usage

adidtc gen-dts [OPTIONS]

Options

-b, --board <board>

Required Board class to use for generation

Options:

ad9081_fmc | ad9082_fmc | ad9083_fmc | ad9084_fmc | adrv9002_fmc | adrv9008_fmc | adrv9009_fmc | adrv9025_fmc | adrv937x_fmc | daq2 | fmcomms_fmc

-p, --platform <platform>

Required Target platform (e.g., zcu102, vpk180, zc706, vcu118)

-c, --config <config>

Required Path to JSON configuration file

-k, --kernel-path <kernel_path>

Path to Linux kernel source tree (overrides LINUX_KERNEL_PATH env var)

-o, --output <output>

Output DTS file path

--compile

Compile DTS to DTB using dtc

jif

Apply pyadi-jif solver output to update device tree clock and JESD parameters.

Reads a JSON configuration file produced by pyadi-jif (the JESD Interface
Framework solver) and updates the corresponding device tree nodes.
Currently supports clock device updates (e.g. HMC7044, AD9523-1, AD9528).
NODE_TYPE - Type of device to configure: clock, converter, system,
or fpga (only clock is currently implemented)
Examples:
Apply solved clock parameters to the device tree:
adidtc -c remote_sysfs -i 192.168.2.1 jif clock -f solved_clocks.json
Apply clock config and reboot the board:
adidtc -c remote_sysfs -i 192.168.2.1 jif clock -f solved_clocks.json –reboot
Apply to a local sysfs device tree:
adidtc jif clock -f solved_clocks.json
The JSON file should contain a “clock” key with “part” and device
parameters, as produced by pyadi-jif’s solver output.

Usage

adidtc jif [OPTIONS] {clock|converter|system|fpga}

Options

-r, --reboot

Reboot boards after successful write

-f, --filename <filename>

Name of json file to import with JIF config

Arguments

NODE_TYPE

Required argument

kuiper-boards

List ADI Kuiper Linux supported boards and their device tree generation status.

Shows all boards from the Kuiper Linux release manifest with their
support status for device tree generation:
full — Board class + XSA profile available; full DTS generation
profile_only — XSA profile available but no board class
unsupported — Not yet supported by pyadi-dt
Each entry shows the status, board name, converter, platform, and
board class (if available).
Examples:
List all boards:
adidtc kuiper-boards
Show only fully supported boards:
adidtc kuiper-boards –status full
Show boards that only have a profile:
adidtc kuiper-boards –status profile_only
Export as JSON for scripting:
adidtc kuiper-boards –json-output
Filter JSON output with jq:
adidtc kuiper-boards –json-output | jq ‘to_entries[] | select(.value.status == “full”)’

Usage

adidtc kuiper-boards [OPTIONS]

Options

-s, --status <status>

Filter by support status

Options:

all | full | profile_only | unsupported

--json-output

Output raw JSON

profile2dt

Generate a device tree from Transceiver Evaluation Software profile exports.

Parses profile and configuration files exported from the ADI Transceiver
Evaluation Software (TES) Profile Configuration Wizard and generates a
device tree source file with the corresponding register settings.
Currently supports the ADRV9009 board. Requires both a –profile file
(the TES profile export) and a –config file (the talise_config.c
initialization structure).
Examples:
Generate DTS from ADRV9009 profile wizard exports:
adidtc -b adrv9009_pcbz profile2dt –profile profile.json –config talise_config.c
The output filename is determined by the board class.

Usage

adidtc profile2dt [OPTIONS]

Options

-p, --profile <profile>
-c, --config <config>

path to talise_config.c

prop

Get and set device tree properties on a single node.

Read or write properties of a device tree node identified by name or
compatible string. When called with no arguments, lists all available
node names (or compatible IDs with –compat). When called with only a
node name, prints all properties of that node. Add PROP to read a
single property, and VALUE to write it.
NODE_NAME - Name of node to address (omit to list all nodes)
PROP - Property name to read or write (omit to list all)
VALUE - Value to write; comma-separated for arrays (e.g. “1,2,3”)
Examples:
List all node names on the local device tree:
adidtc prop
List all compatible IDs:
adidtc prop –compat
Show all properties of a node by name:
adidtc prop axi_ad9144_jesd
Show a single property value:
adidtc prop axi_ad9144_jesd compatible
Find a node by compatible string and show its properties:
adidtc prop -cp adi,axi-ad9144-1.0
Set a property value (integer):
adidtc prop axi_ad9144_jesd num-lanes 4
Set a property value (comma-separated array):
adidtc prop axi_ad9144_jesd lane-map 0,1,2,3
Read from a remote board:
adidtc -c remote_sysfs -i 192.168.2.1 prop -cp adi,ad9361 clock-output-names

Usage

adidtc prop [OPTIONS] [NODE_NAME] [PROP] [VALUE]

Options

-r, --reboot

Reboot boards after successful write

-cp, --compat

Use node name to check against compatible id of node during search

-ch, --children

Show properties of child nodes 1 level down

Arguments

NODE_NAME

Optional argument

PROP

Optional argument

VALUE

Optional argument

props

Get and set device tree properties with hierarchical node navigation.

An enhanced version of the prop command that supports drilling down
through nested nodes by specifying multiple node names. The first
name selects the parent node; subsequent names navigate into child
nodes. This is useful for reaching deeply nested nodes without
typing full paths.
NODE_NAME - One or more node names forming a path from parent
to target (omit to list all top-level nodes)
Examples:
List all top-level node names:
adidtc props
List all compatible IDs:
adidtc props –compat
Show properties and child nodes of a parent node:
adidtc props axi_ad9144_jesd
Drill into a child node:
adidtc props amba axi_ad9144_jesd
Find a node by compatible ID, then drill into a child:
adidtc props -cp adi,axi-ad9144-1.0 lane0
Read a single property from a nested node:
adidtc props amba axi_ad9144_jesd -p compatible
Set a property value on a nested node:
adidtc props amba axi_ad9144_jesd -p num-lanes -v 4
Set a property and reboot:
adidtc props amba axi_ad9144_jesd -p num-lanes -v 4 –reboot
Read from a local DTB file:
adidtc -c local_file -f devicetree.dtb props amba spi0

Usage

adidtc props [OPTIONS] [NODE_NAME]...

Options

-cp, --compat

Use node name to check against compatible id of node during search. This is only used for the first node

-r, --reboot

Reboot boards after successful write

-p, --prop <prop>

Property of node to read to set

-v, --value <value>

Value to set property to

Arguments

NODE_NAME

Optional argument(s)

sd-move

Move boot files on a remote SD card to switch reference designs.

Swaps the active boot files (BOOT.BIN, device tree, etc.) on a remote
SD card to match a different reference design folder. This is useful
when the SD card already contains multiple reference design directories
and you want to switch between them without re-flashing.
Requires –context set to local_sd or remote_sd. Does not work with
sysfs or local_file contexts.
RD - Name of the reference design folder on the SD card
(e.g. “daq2”, “adrv9009”)
Examples:
Switch to the daq2 reference design on a remote SD card:
adidtc -c remote_sd -i 192.168.2.1 sd-move daq2
Preview the commands without running them:
adidtc -c remote_sd -i 192.168.2.1 sd-move daq2 –dry-run –show
Switch and reboot the board:
adidtc -c remote_sd -i 192.168.2.1 sd-move adrv9009 –reboot

Usage

adidtc sd-move [OPTIONS] [RD]

Options

-r, --reboot

Reboot boards after successful write

-s, --show

Print commands as run

-d, --dry-run

Dryrun, do not run commands

Arguments

RD

Optional argument

sd-remote-copy

Copy local boot files to a remote SD card over the network.

Transfers one or more local files (BOOT.BIN, device tree blobs, etc.)
to the boot partition of a remote SD card via SSH/SCP. Use this after
generating new boot artifacts to deploy them to a board without
physically swapping the SD card.
Requires –context set to local_sd or remote_sd. Does not work with
sysfs or local_file contexts.
FILES - Comma-separated list of local file paths to copy
Examples:
Copy a single device tree blob:
adidtc -c remote_sd -i 192.168.2.1 sd-remote-copy system.dtb
Copy multiple boot files:
adidtc -c remote_sd -i 192.168.2.1 sd-remote-copy BOOT.BIN,system.dtb,image.ub
Preview the copy commands:
adidtc -c remote_sd -i 192.168.2.1 sd-remote-copy system.dtb –dry-run –show
Copy and reboot the board:
adidtc -c remote_sd -i 192.168.2.1 sd-remote-copy BOOT.BIN,system.dtb –reboot

Usage

adidtc sd-remote-copy [OPTIONS] [FILES]

Options

-r, --reboot

Reboot boards after successful write

-s, --show

Print commands as run

-d, --dry-run

Dryrun, do not run commands

Arguments

FILES

Optional argument

xsa-profile-show

Show the full contents of a built-in XSA board profile as JSON.

Prints the complete profile definition including converter type,
platform, JESD link parameters, clock topology, and any board-specific
overrides. Use this to inspect a profile before passing it to xsa2dt,
or to create a custom profile based on an existing one.
NAME - Profile name (as shown by xsa-profiles)
Examples:
Show the AD9081 ZCU102 profile:
adidtc xsa-profile-show ad9081_zcu102
Save a profile to a file for customization:
adidtc xsa-profile-show ad9081_zcu102 > my_custom_profile.json
Pretty-print with jq:
adidtc xsa-profile-show adrv9009_zcu102 | jq .

Usage

adidtc xsa-profile-show [OPTIONS] NAME

Arguments

NAME

Required argument

xsa-profiles

List available built-in XSA board profiles.

Prints the names of all built-in board profiles that can be passed to
the xsa2dt –profile option. Each profile contains board-specific
metadata (converter type, platform, clock topology) that the XSA
pipeline uses to generate correct device tree nodes.
Examples:
List all available profiles:
adidtc xsa-profiles
Pipe to grep to search for a specific converter:
adidtc xsa-profiles | grep ad9081
Show details of a specific profile:
adidtc xsa-profile-show ad9081_zcu102

Usage

adidtc xsa-profiles [OPTIONS]

xsa2dt

Generate ADI device tree from a Vivado XSA file.

Runs the full 5-stage XSA pipeline:
1. sdtgen — Invoke lopper to extract a base device tree from the XSA
2. parse — Detect ADI IPs and build a hardware topology
3. build — Generate overlay nodes for converters, clocks, JESD links
4. merge — Combine the base DTS with the generated overlay
5. report — Produce an interactive HTML visualization
The config JSON (-c) provides pyadi-jif solver output with clock
frequencies and JESD204 link parameters. Optionally pass –profile
to use a built-in board profile (run ‘adidtc xsa-profiles’ to list).
Requires sdtgen (lopper) on PATH. If not found, the runner tries to
source a local Vitis/Vivado settings script automatically.
Output artifacts (written to -o directory):
*.dtso — Generated overlay
*.dts — Merged device tree source
*_report.html — Interactive visualization report
Examples:
Basic generation with a config file:
adidtc xsa2dt -x design_1.xsa -c ad9081_cfg.json
Custom output directory and longer timeout:
adidtc xsa2dt -x design_1.xsa -c cfg.json -o ./out –timeout 180
Use a built-in board profile:
adidtc xsa2dt -x design_1.xsa -c cfg.json –profile ad9081_zcu102
Compare against a reference DTS for parity checking:
adidtc xsa2dt -x design_1.xsa -c cfg.json –reference-dts ref.dts
Fail if parity check finds missing required roles:
adidtc xsa2dt -x design_1.xsa -c cfg.json –reference-dts ref.dts –strict-parity
Run the structural DTS linter on the output:
adidtc xsa2dt -x design_1.xsa -c cfg.json –lint
Fail on lint errors:
adidtc xsa2dt -x design_1.xsa -c cfg.json –strict-lint
Generate PetaLinux-compatible output (system-user.dtsi):
adidtc xsa2dt -x design_1.xsa -c cfg.json –format petalinux
Generate and install into a PetaLinux project:
adidtc xsa2dt -x design_1.xsa -c cfg.json –format petalinux –petalinux-project /path/to/project

Usage

adidtc xsa2dt [OPTIONS]

Options

-x, --xsa <xsa>

Required Path to Vivado .xsa file

-c, --config <config>

Required Path to pyadi-jif JSON configuration file

-o, --output <output>

Output directory

Default:

'./generated'

-t, --timeout <timeout>

sdtgen subprocess timeout in seconds

Default:

120

--profile <profile>

Optional board profile name (for example: ad9081_zcu102, adrv9009_zcu102)

--reference-dts <reference_dts>

Optional reference DTS root file used to generate parity reports

--strict-parity

Fail when manifest parity reports missing required roles

--lint, --no-lint

Run structural DTS linter on generated output

Default:

False

--strict-lint

Fail when DTS linter finds errors (implies –lint)

--format <output_format>

Output format. ‘petalinux’ generates system-user.dtsi and device-tree.bbappend

Default:

'default'

Options:

default | petalinux

--petalinux-project <petalinux_project>

PetaLinux project directory. When set with –format petalinux, copies system-user.dtsi into the project