Files
Jetson/scripts/detect_platform.sh
AngePierreandClaude Opus 5 e0727d957b detect_platform: %q-escape output so eval survives spaces in MODEL
The Jetson model string has spaces; emitted unquoted, eval ran its second word
as a command ("Jetson: command not found"). printf %q makes the output safe to
eval, which is how every other script consumes it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 16:57:53 +02:00

61 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Prints the facts every other script branches on, one KEY=value per line, so a
# caller can `eval "$(detect_platform.sh)"`.
#
# The point of the whole repo is that these differ between Jetsons and nothing is
# assumed: the original Nano is tegra210 on L4T R32 (JetPack 4, Ubuntu 18.04,
# CUDA 10.2), an Orin is tegra234 on R35/R36 (JetPack 5/6). One install procedure,
# values read here, binaries built locally to match.
set -euo pipefail
# L4T release, e.g. "32.7.1" or "36.4.3". Two sources; the file is the reliable
# one on every generation, the package is the cross-check.
l4t=""
if [[ -f /etc/nv_tegra_release ]]; then
# "# R32 (release), REVISION: 7.1, ..." -> 32.7.1
rel=$(sed -n 's/^# R\([0-9]*\).*REVISION: \([0-9.]*\).*/\1.\2/p' /etc/nv_tegra_release)
l4t="$rel"
fi
if [[ -z "$l4t" ]] && command -v dpkg-query >/dev/null 2>&1; then
l4t=$(dpkg-query --showformat='${Version}' -W nvidia-l4t-core 2>/dev/null \
| sed 's/-.*//') || true
fi
major="${l4t%%.*}"
# SoC family, from the device tree — the ground truth for what can run here.
soc="unknown"
if [[ -r /proc/device-tree/compatible ]]; then
comp=$(tr '\0' '\n' < /proc/device-tree/compatible)
case "$comp" in
*tegra210*) soc="tegra210" ;; # Nano, TX1
*tegra186*) soc="tegra186" ;; # TX2
*tegra194*) soc="tegra194" ;; # Xavier
*tegra234*) soc="tegra234" ;; # Orin
*tegra264*) soc="tegra264" ;; # Thor
esac
fi
model="unknown"
[[ -r /proc/device-tree/model ]] && model=$(tr -d '\0' < /proc/device-tree/model)
# JetPack generation follows from the L4T major, and it is what decides toolchain
# and dependency names.
case "$major" in
32) jetpack="4" ;;
35) jetpack="5" ;;
36) jetpack="6" ;;
38) jetpack="7" ;;
*) jetpack="unknown" ;;
esac
# %q-escaped so a caller can `eval` the output safely: MODEL holds spaces
# ("NVIDIA Jetson Orin Nano …"), which unquoted would make eval run "Jetson" as a
# command.
printf 'L4T=%q\n' "${l4t:-unknown}"
printf 'L4T_MAJOR=%q\n' "${major:-unknown}"
printf 'JETPACK=%q\n' "${jetpack}"
printf 'SOC=%q\n' "${soc}"
printf 'ARCH=%q\n' "$(uname -m)"
printf 'MODEL=%q\n' "${model}"