Install from Packages
This guide covers installing the SLASH stack from pre-built Debian or RPM packages. This is the recommended installation method for most users.
For building everything from source (e.g. for development or unsupported distributions), see Build from Source.
Package Groups
SLASH is split into focused packages so you install only what you need.
Runtime packages (required on every host with a V80 board):
Package |
Purpose |
|---|---|
|
DKMS source for the |
|
Shared library for interacting with the kernel module over the driver’s character device. |
|
Daemon that multiplexes device access, enforces permissions, and
manages board state. Includes systemd units, udev rules, and
default |
|
Client libraries ( |
|
VRT C++ runtime library — the high-level API for kernels, buffers, and device control. |
|
Board management CLI: |
Development packages (required when building applications or HLS kernels):
Package |
Purpose |
|---|---|
|
Headers and CMake targets for |
|
Headers and CMake targets for |
|
Headers and CMake targets for |
|
Python-based kernel linker that packages compiled HLS IP into
|
Convenience metapackages:
Package |
Pulls in |
|---|---|
|
All runtime packages above except |
|
All development packages above. |
|
Runtime subset for simulation/emulation hosts (no board required). |
|
Development subset for simulation/emulation. |
Build the Packages
All packages — including the AMI driver package — are produced by a single script run from the repository root:
scripts/package-deb.sh
Packages are written to ./deb/.
scripts/package-rpm.sh
Packages are written to ./rpm/.
Both scripts call scripts/package-ami.sh internally, so the AMI package
is built and placed in the same output directory as the SLASH packages.
Install System Prerequisites
Every target machine needs kernel headers so that DKMS can compile the kernel module:
sudo apt install linux-headers-$(uname -r)
sudo dnf install kernel-devel-$(uname -r)
Other install-time dependencies (dkms, gcc, libraries, etc.) are
declared by the packages themselves and will be pulled from the system
repositories automatically.
Install the AMI Driver
The V80 board’s PF0 function (device ID 0x50B4) is managed by the
AMI (AVED Management Interface) kernel module. Install it before the
rest of the SLASH stack so it can bind to PF0 when the board enumerates over
PCIe.
sudo apt install ./deb/ami_<version>_amd64.deb
sudo dnf install ./rpm/ami-<version>-1.<dist>.x86_64.rpm
Warning
If AMI is already installed on this system — for example, built from source or installed from a separate vendor package — the generated AMI package may conflict with the existing installation. Either remove the existing AMI installation before proceeding, or skip this step and ensure your installed AMI version is compatible with this SLASH release.
If the board already enumerates over PCIe, verify that ami is bound to PF0:
lspci -d 10ee:50b4 -k
You should see Kernel driver in use: ami. If no PF0 is visible yet, continue
to Program the Board and boot the temporary JTAG image first.
Install Runtime Packages
When installing from local package files, list all packages explicitly so that the package manager can satisfy the inter-package dependencies in a single transaction:
sudo apt install \
./deb/slash-dkms_<version>_all.deb \
./deb/libslash_<version>_amd64.deb \
./deb/vrtd_<version>_amd64.deb \
./deb/libvrtd_<version>_amd64.deb \
./deb/libvrt_<version>_amd64.deb \
./deb/v80-smi_<version>_amd64.deb \
./deb/slashkit_<version>_amd64.deb
sudo dnf install \
./rpm/slash-dkms-<version>-1.<dist>.noarch.rpm \
./rpm/libslash-<version>-1.<dist>.x86_64.rpm \
./rpm/vrtd-<version>-1.<dist>.x86_64.rpm \
./rpm/libvrtd-<version>-1.<dist>.x86_64.rpm \
./rpm/libvrt-<version>-1.<dist>.x86_64.rpm \
./rpm/v80-smi-<version>-1.<dist>.x86_64.rpm \
./rpm/slashkit-<version>-1.<dist>.x86_64.rpm
Note
The slash metapackage and metapackage-based installs
(sudo apt install slash) only work when the packages are served
from a configured APT or DNF/YUM repository. Installing a bare
metapackage .deb or .rpm from a local file will fail because
the package manager cannot resolve its dependencies against local
files.
After installation, DKMS automatically compiles and inserts the kernel module for the running kernel. Verify it loaded:
lsmod | grep slash
Start and Enable the Daemon
The vrtd package installs a systemd service and socket. Enable it so
that it starts on boot and is running now:
sudo systemctl enable --now vrtd
Check whether the board is already reachable through the daemon:
v80-smi list
Boards that already enumerate over PCIe should show all four readiness indicators passing (PF0, PF1, PF2, VRTD). If a fresh board is not listed yet, continue to step A below and boot the temporary JTAG image first.
Program the Board
After installing the packages and starting vrtd, program the board with the
SLASH static shell. New users should complete both steps below:
boot a temporary image over JTAG so the board enumerates over PCIe, then
use PCIe to write the permanent image to the on-board flash.
If the board is already running AVED or a previous SLASH static shell, skip step A and perform only step B. In normal operation, repeat step B only when upgrading to a release that changes the static shell, as noted in the release notes. It is not required after crashes, daemon restarts, or other normal operations — SLASH reads from flash but never writes to it during regular use.
No system restart is required after either step.
A. Write a Temporary Image via JTAG Boot
This step loads the no-FPT static-shell PDI over JTAG. The image is temporary: it lets the board enumerate over PCIe so that step B can write the permanent flash image.
A1. Identify the XSDB Target if Multiple Boards Are Present
If the host has more than one V80 connected over USB-JTAG, use xsdb to find
the target_id for the Versal xcv80 device you want to program:
xsdb
connect
targets -target-properties
Use the target_id from the matching Versal xcv80 target. Its child
PMC target is selected automatically.
A2. Write via JTAG
For a single V80, run:
sudo v80-smi write-static-shell --jtag --no-remove-device
For multiple V80s, pass the XSDB target ID from step A1:
sudo v80-smi write-static-shell --jtag --no-remove-device --xsdb-target-id <XSDB_TARGET_ID>
B. Flash the Permanent Image via PCIe
B1. Identify the Board in v80-smi list
After step A completes, or if the board was already running AVED or SLASH, find the board’s PCIe bus address:
v80-smi list
B2. Write via PCIe
Program the primary flash partition (replace <BDF> with the bus address
shown by v80-smi list, e.g. 03:00):
sudo v80-smi write-static-shell --flash -d <BDF>
The command resolves the packaged static shell PDI, programs it through VRTD, and resets the board into the programmed partition. No host reboot or system restart is required.
Install Development Packages
If you are writing applications against the VRT API or compiling HLS kernels, install the development metapackage:
sudo apt install \
./deb/libslash-dev_<version>_amd64.deb \
./deb/libvrtd-dev_<version>_amd64.deb \
./deb/libvrt-dev_<version>_amd64.deb \
./deb/slashkit_<version>_amd64.deb
sudo dnf install \
./rpm/libslash-devel-<version>-1.<dist>.x86_64.rpm \
./rpm/libvrtd-devel-<version>-1.<dist>.x86_64.rpm \
./rpm/libvrt-devel-<version>-1.<dist>.x86_64.rpm \
./rpm/slashkit-<version>-1.<dist>.x86_64.rpm
This installs:
C++ headers under
/usr/include/vrt/,/usr/include/vrtd/, and/usr/include/slash/CMake package files under
/usr/lib/cmake/The
slashkitlinker and theSlashToolsCMake module
CMake projects can then discover VRT with:
find_package(vrt REQUIRED CONFIG)
target_link_libraries(my_app PRIVATE vrt::vrt)
Before building HLS kernels or vrtbin files, source the Vivado and Vitis HLS environment in your shell:
source <path-to-vivado>/settings64.sh
source <path-to-vitis-hls>/settings64.sh
For csh/tcsh shells, use settings64.csh instead. SLASH has been
built and tested against Vivado/Vitis 2025.1; using other versions may
cause breakage.
See Use CMake Modules for details on using the CMake integration.
Install Emulation / Simulation Packages
To develop or run kernels in emulation or simulation without a physical
V80 board, install the slash-sim-emu subset:
sudo apt install \
./deb/libslash_<version>_amd64.deb \
./deb/libvrtd_<version>_amd64.deb \
./deb/libvrt_<version>_amd64.deb
For building emu/sim kernels, also install:
sudo apt install \
./deb/libslash-dev_<version>_amd64.deb \
./deb/libvrtd-dev_<version>_amd64.deb \
./deb/libvrt-dev_<version>_amd64.deb \
./deb/slashkit_<version>_amd64.deb
sudo dnf install \
./rpm/libslash-<version>-1.<dist>.x86_64.rpm \
./rpm/libvrtd-<version>-1.<dist>.x86_64.rpm \
./rpm/libvrt-<version>-1.<dist>.x86_64.rpm
For building emu/sim kernels, also install:
sudo dnf install \
./rpm/libslash-devel-<version>-1.<dist>.x86_64.rpm \
./rpm/libvrtd-devel-<version>-1.<dist>.x86_64.rpm \
./rpm/libvrt-devel-<version>-1.<dist>.x86_64.rpm \
./rpm/slashkit-<version>-1.<dist>.x86_64.rpm
No board and no kernel module are required on emulation/simulation hosts.
The daemon is still needed if any component connects to vrtd, but you
can point applications at the emulation platform directly.
See Emulation and Simulation for a walkthrough.
Upgrade and Removal
Note
If the new version changes the static shell, re-program the board flash after upgrading the packages. See Program the Board above.
Re-run scripts/package-deb.sh to produce the new packages, then
reinstall with apt install — apt handles upgrades transparently
when given local .deb files:
sudo apt install \
./deb/ami_<new-version>_amd64.deb \
./deb/slash-dkms_<new-version>_all.deb \
./deb/libslash_<new-version>_amd64.deb \
./deb/vrtd_<new-version>_amd64.deb \
./deb/libvrtd_<new-version>_amd64.deb \
./deb/libvrt_<new-version>_amd64.deb \
./deb/v80-smi_<new-version>_amd64.deb \
./deb/slashkit_<new-version>_amd64.deb
To remove all SLASH and AMI packages:
sudo apt remove ami slash-dkms libslash libvrtd libvrt \
v80-smi slashkit vrtd
sudo apt autoremove
Re-run scripts/package-rpm.sh, then upgrade:
sudo dnf upgrade \
./rpm/ami-<new-version>-1.<dist>.x86_64.rpm \
./rpm/slash-dkms-<new-version>-1.<dist>.noarch.rpm \
./rpm/libslash-<new-version>-1.<dist>.x86_64.rpm \
./rpm/vrtd-<new-version>-1.<dist>.x86_64.rpm \
./rpm/libvrtd-<new-version>-1.<dist>.x86_64.rpm \
./rpm/libvrt-<new-version>-1.<dist>.x86_64.rpm \
./rpm/v80-smi-<new-version>-1.<dist>.x86_64.rpm \
./rpm/slashkit-<new-version>-1.<dist>.x86_64.rpm
To remove:
sudo dnf remove ami slash-dkms libslash libvrtd libvrt v80-smi slashkit vrtd
Note
Removing slash-dkms automatically removes the kernel module from
DKMS management and unloads it if currently loaded.
Troubleshooting
Kernel module did not load after install
DKMS compiles during package installation. If headers were missing at that point, install them and rebuild:
sudo apt install linux-headers-$(uname -r) # Debian/Ubuntu sudo dkms build slash/0.1 sudo dkms install slash/0.1
vrtd fails to start
Check the journal for errors:
sudo journalctl -u vrtd --no-pagerCommon causes: kernel module not loaded, or board not detected by the OS (check
lspci -d 10ee:).
v80-smi list shows no boards
Verify the module is loaded (
lsmod | grep slash) and that the daemon is running (systemctl status vrtd).
Permission denied
The user must be in the
vrtadmingroup:sudo usermod -aG vrtadmin <username>Log out and back in for the change to take effect.