Flash Bookworm Lite, SSH in headless, configure PCIe Gen 3 for the dual M.2 HAT, migrate the OS root to NVMe, and install the Hailo-8 AI drivers with a single command. Every step — nothing skipped.
Video publishing soon
Subscribe to be notified when it goes live
Download and open Raspberry Pi Imager. Select:
Bookworm Lite only. Do not select Trixie (Hailo support has rough edges) or the Desktop version (wastes resources we need for AI work).
Click Next → Edit Settings. Set hostname (pidev), username, and password. Under the Services tab, tick Enable SSH. Leave WiFi unconfigured — use Ethernet.
Insert the SD card, plug in Ethernet, connect USB-C power. Wait 90 seconds — first boot is slower while it applies your settings. Then from your laptop terminal:
ping pidev.localOnce you see replies, connect:
ssh yourusername@pidev.localReplace yourusername with the username you set in Imager. Type yes at the host key prompt. The cursor will not move when you type your password — that is normal.
Always update before configuring hardware. full-upgrade handles kernel and firmware — do not use upgrade.
sudo apt update && sudo apt full-upgrade -yLet it complete, then reboot:
sudo rebootSSH session will close. Wait 30 seconds, then reconnect.
Do not skip this step. The Seeed dual M.2 HAT uses a PCIe switch chip (ASM2806) that requires specific overlay configuration. Without it, the NVMe or Hailo-8 — or both — will not be recognised.
sudo nano /boot/firmware/config.txtScroll to the very bottom and add these three lines exactly:
dtparam=pciex1
dtparam=pciex1_gen=3
dtoverlay=pciex1-compat-pi5,no-mip,mmio-hiSave: Ctrl+O → Enter → Ctrl+X. Then reboot and verify:
lsblk
lspciYou should see nvme0n1 in lsblk output and both devices listed in lspci.
The SD card stays in the Pi permanently — it handles the bootloader (2 seconds) and hands everything to the NVMe. The operating system, all applications, and AI models run entirely from the Samsung 990 Pro. This is boot-root separation — how production systems are built.
sudo mkfs.ext4 /dev/nvme0n1sudo mkdir -p /mnt/nvme
sudo mount /dev/nvme0n1 /mnt/nvmeCopy the rsync command below — do not type it. One wrong character and the transfer fails.
sudo rsync -axHAWXS --numeric-ids --info=progress2 / /mnt/nvme \
--exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"}This takes several minutes. A live progress indicator will run. Do not interrupt it.
Once complete, open the boot command file:
sudo nano /boot/firmware/cmdline.txtYou will see one long line. Find the section that reads root=PARTUUID= followed by a code ending in -02. Replace that entire section with:
root=/dev/nvme0n1Everything else on the line stays unchanged. Save and reboot. Then verify:
findmnt /You should see /dev/nvme0n1 listed next to the / mount point.
Raspberry Pi partnered directly with Hailo to place the complete driver stack in the official Pi software repository. One command installs the kernel driver, runtime libraries, GStreamer pipeline plugins, and Python bindings.
The Hailo-8 is a vision AI specialist — built for understanding what cameras see in real time. Object detection, people tracking, multi-stream analysis. It is not designed for language models. For everything we build on this channel, it is exactly the right tool.
sudo apt install hailo-allExpect a compilation step. The kernel driver builds for your exact kernel version using DKMS. This takes several minutes — up to ten. The screen will look idle. That is normal. Do not close the terminal.
When complete, reboot. The driver needs to load fresh.
sudo rebootRun all verification commands. Pause after each — confirm the output before moving on.
lsblk
sudo hdparm -t /dev/nvme0n1
hailortcli fw-control identify
lspci | grep -i hailo
dmesg | grep -i hailo
vcgencmd measure_templsblknvme0n1 mounted at / — SD card boot partition at /boot/firmwarehdparm -tSequential reads well above 400 MB/shailortcli identifyBoard Name: Hailo-8 — Device Architecture: HAILO8 (not HAILO8L)lspci | grep hailoOne line — Hailo-8 on PCIe busdmesg | grep hailoDriver probe and init lines — no errorsvcgencmd measure_temp40–50°C at idle — fan may not spin until 50°Csudo apt install htop vim git curlRun on your laptop, not the Pi.
ssh-keygen -t ed25519ssh-copy-id yourusername@pidev.localReplace "Wired connection 1" with the exact name shown by nmcli connection show. Adjust the IP to suit your network.
# Find your connection name first
nmcli connection show
# Apply static IP — replace values for your network
sudo nmcli con mod "Wired connection 1" \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8" \
ipv4.method manual
# Apply the change
sudo nmcli con up "Wired connection 1"ping pidev.local times outSSH connection refusednvme0n1 missing from lsblkhailortcli command not foundhailortcli fw-control identify shows no deviceStatic IP command failsInstall Frigate with Hailo-8 acceleration, connect a WiFi camera, define room zones, and build a Home Assistant floor plan that shows real-time room occupancy. The Hailo-8 you just installed does all the detection — locally, continuously, at full speed.
View series