2. Jetson设备初始化与系统配置

拿到一块全新的 Jetson 模组或整机(如 Orin Nano、Orin NX、Xavier NX),它出厂时通常处于两种状态之一:一是 eMMC 版本,内部已预装 NVIDIA 官方 JetPack 的 L4T(Linux for Tegra)系统;二是 NVMe/无存储版本,需要自行刷写。无论哪种情况,正式投入容器化部署前,都必须完成一次"从裸机到可远程运维"的初始化闭环:刷机 → 首次启动 → 网络与 SSH → 用户权限 → 基础环境自检。本节按这条主线展开,重点讲清每一步的实际操作对象、关键参数和判断依据。

一、刷机流程:SDK Manager 与命令行两条路径

Jetson 刷机本质上是把 NVIDIA 提供的 L4T BSP(Board Support Package)写入设备的引导介质。官方推荐两种方式:图形化的 SDK Manager 和命令行的 flash.sh。前者适合首次接触、需要同时安装 CUDA/cuDNN/TensorRT 等组件的场景;后者适合批量生产、CI 自动化或 SDK Manager 无法识别设备的场景。

使用 SDK Manager 的典型流程是:在 Ubuntu 20.04/22.04 宿主机上安装 SDK Manager,用 USB-C 数据线连接 Jetson 的调试口,将设备置于 Force Recovery 模式(按住 REC 键再按 RESET,或短接 FC 引脚后上电)。此时在宿主机执行 lsusb 应能看到 0955:7xxx NVIDIA Corp. 设备,这是判断是否成功进入恢复模式的关键依据。随后在 SDK Manager 中选择目标模组型号、JetPack 版本、存储介质(eMMC 或 NVMe),勾选需要安装的组件,点击 Flash 即可。

命令行方式则更可控。以 Orin Nano 刷入 NVMe 为例,先下载并解压 L4T BSP 与根文件系统,然后执行:

sudo ./tools/kernel_flash/l4t_initrd_flash.sh \
  --external-device nvme0n1p1 \
  -c tools/kernel_flash/flash_l4t_external.xml \
  -S 32GiB \
  --showlogs --network usb0 \
  jetson-orin-nano-devkit internal

其中 --external-device 指定目标盘,-S 指定 rootfs 分区大小,--network usb0 表示通过 USB 网络完成刷写。刷机成功的标志是串口日志出现 login: 提示,且设备重启后能进入系统。若卡在 Waiting for device to boot,通常是恢复模式未正确进入或 USB 线缆不支持数据传输。

Jetson 初始化与系统配置主线 ① 刷机 Force Recovery 模式 SDK Manager / flash.sh 写入 eMMC 或 NVMe 判断:lsusb 0955:7xxx ② 首次启动 OEM 配置向导 设置用户名 / 密码 时区 / 语言 / 主机名 判断:串口出现 login: ③ 网络与 SSH 有线 / Wi-Fi 连接 静态 IP 或 DHCP 启用 sshd 服务 判断:ssh 远程登录成功 ④ 用户权限 加入 docker 组 sudo 免密策略 串口 / GPIO 权限 判断:id 显示组 ⑤ 基础环境检查(逐项确认) 系统与内核 cat /etc/nv_tegra_release uname -a 确认 L4T 版本匹配 GPU / 算力 nvidia-smi tegrastats 确认 GPU 可用 存储与内存 df -h / free -h lsblk 确认 NVMe 已挂载 容器运行时 docker info nvidia-container-toolkit 确认 runtime 为 nvidia 全部通过 → 设备具备容器化部署条件 任一失败 → 回到对应阶段排查(刷机 / 网络 / 权限 / 驱动) 异常回查

二、网络与 SSH 配置

首次启动完成后,Jetson 默认通过 DHCP 获取 IP。若用于固定部署,建议改为静态 IP。以 Ubuntu 22.04 的 Netplan 为例,编辑 /etc/netplan/01-netcfg.yaml:

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: no
      addresses: [192.168.1.50/24]
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]

执行 sudo netplan apply 后,用 ip addr show eth0 确认地址生效。SSH 方面,Jetson 默认已安装 openssh-server,只需确认 sudo systemctl status ssh 为 active。若需禁用密码登录、改用密钥,可在宿主机生成密钥对后执行 ssh-copy-id nvidia@192.168.1.50,再修改 /etc/ssh/sshd_config 中的 PasswordAuthentication no 并重启服务。这一步对后续远程容器运维至关重要。

三、用户权限与基础环境检查

Jetson 默认用户 nvidia 属于 sudo 组,但默认不在 docker 组。若直接以普通用户执行 docker ps 会报权限错误。正确做法是:

sudo usermod -aG docker $USER
sudo reboot
# 重启后验证
id
docker run --rm hello-world

此外,若涉及串口、GPIO、I2C 等外设操作,还需将用户加入 dialout、gpio、i2c 等组。基础环境检查建议逐项执行并记录:cat /etc/nv_tegra_release 确认 L4T 版本;nvidia-smi 或 tegrastats 确认 GPU 与功耗状态;df -h 与 lsblk 确认 NVMe 已挂载且根分区容量充足;docker info 确认容器运行时已就绪。若 docker info 中 Runtime 未显示 nvidia,说明 nvidia-container-toolkit 未正确安装或未配置,需要重新执行 sudo nvidia-ctk runtime configure --runtime=docker 并重启 docker。

建议把上述检查项整理成一份初始化检查表,每次拿到新设备按表执行,可显著减少"设备能启动但容器跑不起来"的排查时间。