This guide also ships on the device as
~/README.md(runcat ~/README.mdafter SSH).
Jetson AV Box — Operator Guide (“wtf to do”)
Hardware: Jetson Orin NX 16GB (p3768 carrier, no RTC battery) · PREEMPT_RT kernel 5.15.148-tegra · JetPack 6.2 / L4T R36.4.3 · Axelera Metis NPU · ZED X camera · Intel AX210 Wi-Fi/BT (M.2 Key-E) · NVMe rootfs · Realtek GbE on PCIe.
0. THE GOLDEN RULE — the clock must be sane (>= 2020)
This carrier has no RTC battery, so after a full power-off the clock resets to 1970. A 1970 clock breaks the Metis NPU: the Axelera runtime can’t finish device bring-up (cert/time + ZIP < 1980 failures), so the NPU never gets interrupts and dmesg spams axl 0004:01:00.0: IRQ MSI timeout. Everything else looks fine — this trap has cost days. If the NPU is dead, check date FIRST.
- This is handled automatically, offline-safe, by four baked layers: the kernel points
hctosysat the early RTC (CONFIG_RTC_HCTOSYS_DEVICE=rtc1) so the late PMIC RTC can’t stomp the clock back to 1970; the clock-floor guard floors the clock to the last-known-good time at boot and right before the Axelera runtime;/usr/lib/clock-epochgives systemd a build-date floor; andchrony(Cloudflare/Google/NIST) syncs exact time whenever the unit is online. Normally you do nothing. - Manual fix if ever needed (e.g. an older image):
- Manual fix if ever needed:
sudo date -u -s "YYYY-MM-DD HH:MM:SS" # real UTC, copy from a synced machine sudo hwclock -w - When the box has internet,
chronypulls exact time on top of the floor.
1. Get in (access)
- SSH over the USB-A ethernet dongle (primary): from the dev host run
ssh j@192.168.66.106. The host serves DHCP onenp175s0(192.168.66.1); the dongle leases 192.168.66.100–150. If the IP changed, on the host checkcat /var/lib/misc/dnsmasq.leasesor sweepfor n in $(seq 100 150); do ping -c1 -W1 192.168.66.$n; done. - Serial console:
ttyTCU0@ 115200 8N1 — 40-pin header pin 8 (TX) / 10 (RX) / 6 (GND), 3.3 V (not 5 V tolerant). On the host:picocom -b 115200 /dev/ttyUSB0. - A black DP/HDMI screen is normal when headless (§2) — it is NOT a hang. Use SSH or serial to confirm the box is up.
2. GUI vs headless (DP image on/off)
Headless by default (best for streaming tools / inference — no wasted GPU on a desktop). Toggle any time; nvidia_drm loads automatically when the GUI starts:
| Want | Command |
|---|---|
| GUI now (no reboot) | sudo systemctl isolate graphical.target |
| Headless now | sudo systemctl isolate multi-user.target |
| Boot to GUI from now on | sudo systemctl set-default graphical.target |
| Boot headless from now on (default) | sudo systemctl set-default multi-user.target |
3. Metis NPU — is it alive?
Runtime lives in /opt/av-env (source /opt/av-env/bin/activate, or use full paths in /opt/av-env/bin).
- List the device:
axdevice→ expectDevice 0: metis-4:1:0 … flver=… clock=800MHz. - Benchmark it:
axrunmodel --seconds 5 ~/voyager-sdk/build/yolo11s-coco-onnx/yolo11s-coco-onnx/1→ ~405 FPS system on YOLO11s. - If it’s dead:
date— wrong/1970? Fix the clock (§0). This is the #1 cause.grep msi-metis /proc/interrupts | awk '{for(i=2;i<=9;i++)s+=$i}END{print s}'— should be > 0 and climbing. Stuck at 0 = MSI not flowing (almost always the clock).sudo dmesg | grep axl— repeatingIRQ MSI timeout= device never came up.
4. Wi-Fi (Intel AX210, M.2 Key-E / PCIe C1)
- The driver (
iwlwifi) and firmware (iwlwifi-ty-a0-gf-a0-*) are installed. WiFi needs PCIe C1 enabled in the boot DTB (/boot/extlinux/extlinux.conf→FDTmust point at a DTB whosepcie@14100000isokay, NOT the*c1off*one). - Check:
lspci -d 8086:(card present),ip link/nmcli dev status(wlan0),dmesg | grep iwlwifi. - Connect:
nmcli dev wifi connect "<SSID>" password "<PASS>". - The AX210 Bluetooth half works over USB regardless of C1.
- If
wlan0is missing: confirm the FDT is a C1-enabled DTB, anddmesg | grep 14100000—Link up= good;Phy link never came up= slot/link issue.
5. USB-C
The old “USB-C kills the kernel” storm (tegra-xudc … PORTSC = 0xffffffff flood) is fixed by a udev rule that keeps the device-mode controller powered. Plug freely. Recovery-mode flashing uses the bootROM USB path and is unaffected by any of this.
6. If it won’t boot
- Lands in a
bash-5.1#recovery shell (serial shows “Finding OTA work dir” → drops to shell): the bootloader fell back to Recovery Boot. Fix in UEFI: power on → tapEsc→ Device Manager → NVIDIA Configuration → L4T Configuration → set OS chain A status = Normal and L4T Boot Mode = ExtLinux →F10→ reboot. extlinux.confsanity: must have exactly oneroot=—grep -c root= /boot/extlinux/extlinux.confreturns1. More than one = mangled (restore a*.good/backup). Full detail: repodocs/TROUBLESHOOTING.mdF-11 / F-12.- Stuck in a UEFI
HTTP Boot over IPv4/PXEloop (serial spamsIPv4 IPv4 …, never reaches Linux): the UEFI boot order has a network interface ahead of the NVMe. Fix from Linux:sudo efibootmgrthensudo efibootmgr -o <NVMe-entry-first>,…(put the…NVMe(…)entry first). Seedocs/TROUBLESHOOTING.mdF-15.
7. Key files & services
clock-floor.service+clock-floor-save.timer— clock guard. Script/usr/local/sbin/clock-floor, saved floor in/var/lib/clock-floor.epoch./etc/udev/rules.d/99-tegra-xudc-keepawake.rules— USB-C storm fix./boot/extlinux/extlinux.conf— boot config (singleroot=, C1-enabled FDT).- Full docs: the jetson-rt-stack repo
docs/— especiallyTROUBLESHOOTING.md(H-13 Metis clock, F-11/12/13 boot & USB-C) andOPERATIONS.md(this guide).