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

slash-dkms

DKMS source for the slash kernel module. Compiles and installs slash.ko for the running kernel automatically.

libslash

Shared library for interacting with the kernel module over the driver’s character device.

vrtd

Daemon that multiplexes device access, enforces permissions, and manages board state. Includes systemd units, udev rules, and default /etc/vrt/vrtd.conf.

libvrtd

Client libraries (libvrtd C wire-protocol, libvrtdpp C++ RAII wrapper) for applications that communicate with the daemon.

libvrt

VRT C++ runtime library — the high-level API for kernels, buffers, and device control.

v80-smi

Board management CLI: list, inspect, program, query, reset, validate.

Development packages (required when building applications or HLS kernels):

Package

Purpose

libslash-dev

Headers and CMake targets for libslash.

libvrtd-dev

Headers and CMake targets for libvrtd / libvrtdpp.

libvrt-dev

Headers and CMake targets for libvrt.

slashkit

Python-based kernel linker that packages compiled HLS IP into .vbin archives. Provides the build_hls_dir() and add_vbin() CMake functions via the SlashTools module.

Convenience metapackages:

Package

Pulls in

slash

All runtime packages above except v80-smi (install separately).

slash-dev

All development packages above.

slash-sim-emu

Runtime subset for simulation/emulation hosts (no board required).

slash-sim-emu-dev

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:

  1. boot a temporary image over JTAG so the board enumerates over PCIe, then

  2. 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 slashkit linker and the SlashTools CMake 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-pager

Common 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 vrtadmin group:

sudo usermod -aG vrtadmin <username>

Log out and back in for the change to take effect.