很多人第一次拿到 Jetson Nano 的第一反应是:找显示器、找键盘鼠标,把它当成一台迷你电脑来伺候。但等真把这一套外设接完之后你会发现,开发板日常使用的正确姿势根本不是“接显示器操作”,而是安安静静躺在一个角落,用笔记本远程控制它。尤其是后续要跑 YOLOv5、做 CSI 摄像头推理这类 AI 边缘计算项目时,绝大部分时间你都会通过 SSH 连上去写代码、传文件、看日志,显示器只在最初调试时用一下。所以系列的第一篇,我先不急着讲模型部署,而是把“笔记本电脑控制 Jetson Nano”这条链路完整打通——这也是一切 AI 应用开发的地基。
1. Jetson Nano 的价值定位:为什么控制链路比板卡本身更重要
1.1 它不是树莓派的替代品,而是 AI 边缘计算的入口
Jetson Nano 是 NVIDIA 推出的入门级 AI 边缘计算开发板,默认搭载基于 Ubuntu 定制的 JetPack 系统。相比树莓派这类通用 SBC,它的核心优势是板载 NVIDIA GPU(Maxwell 架构,128 个 CUDA 核心),可以本地运行 CUDA、cuDNN、TensorRT 这些加速库,直接跑轻量级深度学习推理。很多人把 Jetson Nano 买回来当树莓派用,接个屏幕看看网页、敲敲 Python,其实是大材小用——这块板子真正的价值是在低功耗的边缘场景里跑视觉模型。
然而也正是因为它主打“边缘计算”,它的使用场景往往没有现成的显示器、键鼠。大多数情况下,开发板旁边只有一根电源线和一根网线,甚至只有一块 USB 无线网卡。真正的开发主力是你那台笔记本。所以“用笔记本控制 Jetson Nano”这件事不是可选项,而是必经之路。把这条路走顺了,后面所有项目才有操作基础。
1.2 “笔记本电脑控制”到底指什么:三条链路的分工
很多人以为“用笔记本控制 Jetson Nano”就是远程桌面,其实这是最大的误解。我实际开发中主要依赖三条链路,各自分工不同:
| 控制方式 | 用途 | 依赖条件 | 优先级 |
|---|---|---|---|
| SSH 远程命令行 | 日常写代码、编译、运行程序、看日志 | 网络连通 | 主力 |
| 调试串口(UART) | 系统无法引导时的救援入口、无显示器时的初始配置 | USB 转串口模块 | 兜底 |
| RDPS / VNC 远程桌面 | 偶尔需要看图形界面、访问桌面应用 | 网络连通、桌面环境配置 | 辅助 |
SSH 是日常使用频率最高的,但不建议一上来就只学 SSH。因为如果你在 Jetson Nano 上开启了防火墙、改了 SSH 端口、或者系统引导出了问题,唯一能进到系统内部的通道就是调试串口。我在系列文章中会反复强调“兜底链路”的重要性,这是很多教程不会告诉你的事。
1.3 硬件清单与选购建议
在开始折腾之前,先把硬件备齐。除了 Jetson Nano 开发板本体之外,我建议按下面这个清单准备:
- 电源:官方推荐 5V 4A DC 圆口电源,这点极其重要,后面踩坑章节会专门讲。不要用手机充电头凑合。
- Micro SD 卡:至少 32GB,Class 10 / A1 级别,闪迪、三星等大厂产品优先。SD 卡的随机读写性能直接影响系统流畅度。
- 网线:一根,用于首次连通网络,后面如果配好了无线网卡可以拔掉。
- USB 转 TTL 调试串口模块:推荐 CP2102 或 CH340,十几块钱,这是救命的兜底通道。
- 读卡器:用于在笔记本上烧录系统镜像。
- 可选:USB 无线网卡或 M.2 无线网卡(B01 版本板载 M.2 Key E 接口),用于甩开网线。
- 可选:杜邦线若干,连接串口模块与 Jetson Nano 的 40pin 排针。
这套清单里最容易忽略的是调试串口模块。很多人觉得有网络就够了,结果某天 SSH 怎么也连不上、板子又没接显示器,只能干瞪眼。所以我还是建议一次性把串口模块买了,便宜,不占地方,关键时刻能救命。
2. 系统烧录这一步,藏着一个影响后续所有操作的细节
2.1 选哪个镜像:JetPack 版本与镜像格式
系统镜像选择直接决定你后面能跑什么软件。Jetson Nano 官方刷机方式有两种:用 SDK Manager 刷机(需要 NVIDIA 账号,适合从零制作带开发环境的完整系统),或者下载官方 SD Card Image 直接烧录到 SD 卡。我自己的经验是:对于纯入门、只是想要一块能跑 AI 模型的板子,SD Card 镜像方式最省事,下载解压就是一个 img 文件。
镜像版本方面,我个人目前踩坑最少的是 JetPack 4.6.x 系列(L4T R32.7.x,基于 Ubuntu 18.04)。虽然 JetPack 5.x 已经支持 Jetson Nano,社区里很多教程、模型编译脚本还是基于 4.x 写的,新手用 4.6 系列可以少走很多弯路。等对系统、驱动、CUDA 版本这些概念熟了,再考虑升级 5.x 不迟。下载时认准 NVIDIA 官网 Jetson 下载中心的 “Jetson Nano Developer Kit SD Card Image”,解压后镜像约 6GB 左右。
2.2 烧录实操
烧录工具我推荐 balenaEtcher,Windows / macOS / Linux 都有对应版本,界面简单,不容易选错目标盘。流程如下:
- 用读卡器把 SD 卡插入笔记本。
- 打开 balenaEtcher,选择刚才解压出来的 img 文件。
- 选择目标磁盘——注意这一步一定要确认选中的是 SD 卡而不是笔记本硬盘,看容量就能分辨。
- 点击 Flash,等待写入完成。SD 卡速度不同,一般 10 到 30 分钟不等。
除了 Etcher,Linux 下也可以用dd命令,我个人更习惯 Etcher,省心。烧录完成之后,系统会把 SD 卡的 boot 分区挂载出来,Windows 资源管理器里能看到一个盘符。这里要特别强调一个细节:boot 分区(FAT32)是 Windows 能读到的,但真正的系统根分区是 ext4 格式,Windows 默认读不了。很多新手烧录完发现“SD 卡里只有几个文件”,以为烧录失败,其实没有,系统文件都在那个看不见的 ext4 分区里。
2.3 首次开机前的网络决策
第一次开机前,就要想好后续网络方案,因为这会决定你接下来怎么操作。
如果手头有网线,最省心的方式是:开发板插上网线,另一端插到路由器 LAN 口,然后从笔记本访问路由器后台查看开发板分配的 IP。这种有线连接最稳定,也最容易排查问题。
如果没有路由器,也可以用网线把 Jetson Nano 和笔记本电脑直连,手动设置两边的静态 IP,让它们组成一个独立的小局域网。这种方式适合没有 WiFi 的场景,但首次配置需要在开发板端操作,所以最好先有串口或者显示器把网络参数配好。
如果打算用无线,那就需要提前准备 USB 无线网卡或 M.2 无线网卡,并确认芯片型号的 Linux 驱动支持情况。这部分内容我在第 4 章详细展开。首次开机我不建议一上来就折腾无线,先用有线把系统跑起来,再逐步加无线,排查难度会小很多。
3. 先用调试串口接管开发板:最不依赖外设的控制入口
3.1 为什么第一入口选串口而不是 SSH
理论上,系统烧录完成、开发板插上网线开机之后,路由器后台就能看到它的 IP,理论上可以直接 SSH。但问题在于:官方 SD Card 镜像默认并不保证 SSH 服务已经启动。各版本镜像行为不一致,我在 4.6.2 上遇到过插上网线就能 SSH 的情况,也见过某次烧录后 SSH 端口根本不通的窘境。如果你没有显示器,SSH 又连不上,这时候唯一的出路就是调试串口。
相比 SSH,串口是独立于网络之外的控制通道,只需要 USB 转 TTL 模块和几根杜邦线,不依赖 IP、不依赖网卡、不依赖系统完全启动。只要开发板通电、内核没崩,你就能看到一个登录提示符。所以在没有显示器的情况下,正确的接管顺序应该是:串口登录 -> 启用 SSH -> 网络连接 -> 后续开发。这也是我为什么把它放在网络配置之前讲。
3.2 连线与驱动
Jetson Nano Developer Kit 的 40pin 排针上带有一组 UART 调试串口,在排针上的定义如下:
| 引脚 | 功能 |
|---|---|
| Pin 6 | GND |
| Pin 8 | UART1_TXD(开发板发送,接转接模块 RX) |
| Pin 10 | UART1_RXD(开发板接收,接转接模块 TX) |
连接时注意交叉:开发板的 TXD 接转接模块的 RXD,开发板的 RXD 接转接模块的 TXD,GND 接 GND。不要接反,否则串口完全没输出。接好之后,把 USB 转 TTL 模块插到笔记本上,根据模块芯片安装驱动:CP2102 装 Silicon Labs CP210x 驱动,CH340 装 WCH 驱动。
打开任意串口工具,我这里 Windows 上用 MobaXterm(也推荐 PuTTY),macOS / Linux 用户可以用 screen 或 picocom。配置参数:波特率 115200,数据位 8,停止位 1,无校验。这个参数是 Jetson 串口控制台的默认配置,别把波特率设置成 9600 之类,否则屏幕上只会出现乱码。
3.3 登录系统并启用 SSH 服务
串口连接成功后,给 Jetson Nano 上电,窗口中会滚动内核启动日志。第一次启动会做文件系统扩展,时间比较长,可能持续数分钟,中间不要断电。最后会出现登录提示:
nvidia login:输入默认用户名nvidia,密码nvidia,进入系统。建议立刻执行:
sudo systemctl enable ssh sudo systemctl start ssh sudo systemctl status ssh如果提示找不到 ssh 服务,说明系统镜像裁剪了 OpenSSH Server,手动安装一下:
sudo apt update sudo apt install openssh-server装完再执行上面的systemctl命令。这一步做完,SSH 服务就开机自启了,后续只要网络通,就能直接用笔记本 SSH 登录,串口可以收起来备用。
4. 正式切换到 SSH:从串口登录到笔记本远程控制的完整配置
4.1 三种让开发板连接笔记本的方案
SSH 能连上的前提是笔记本和 Jetson Nano 在同一个网络内。实际部署环境不同,用到的方案也不同。我整理了一下自己常用的三种:
方案一:路由器中转(最推荐)
开发板网线接路由器 LAN 口,笔记本通过 WiFi 或网线接同一路由器。路由器 DHCP 会给两个设备分别分配 IP,互相能访问。这种方式的好处是配置最简单,笔记本无线也不影响,后续如果开发板想上外网装软件,也是直接通的。
方案二:笔记本开 WiFi 热点
如果出差在外,没有路由器可以用,笔记本开一个移动热点,让 Jetson Nano 用 USB 无线网卡连接热点,或者用网线连到笔记本的 RJ45 网口再开启网络共享。热点方式需要在笔记本热点设置里查 Jetson 的 IP,Windows 热点管理页面能看到已连接设备列表。
方案三:笔记本与开发板网线直连
笔记本有网口的情况下,网线一头插笔记本,另一头插 Jetson Nano,两边手动配置一个局域网段。Windows 上把以太网卡的 IP 改成192.168.1.100,子网掩码255.255.255.0;开发板侧(串口登录后)通过nmcli或/etc/netplan把eth0配成192.168.1.101。然后从笔记本ssh nvidia@192.168.1.101即可。这种方式不需要任何外部设备,但要求开发板侧已经能登录进去,所以一般放在串口之后操作。
4.2 找到 IP 地址
路由器中转时,获取开发板 IP 有以下几种方式:
- 登录路由器管理后台(一般是 192.168.1.1 或 192.168.0.1),在 DHCP 客户端列表里找到名为
nvidia或 MAC 地址规律为02:...的设备。 - 如果进了系统(串口或显示器),直接执行
ip addr查看 eth0 或 wlan0 的地址。 - 在笔记本上用 Advanced IP Scanner 扫描网段,能列出所有在线设备。
拿到 IP 之后,先在笔记本上ping一下确认连通,然后执行 SSH 登录:
ssh nvidia@192.168.1.101Windows 10 1809 及以上版本自带 OpenSSH 客户端,终端里直接能跑。首次连接会提示确认主机指纹,输入yes,再输入密码nvidia,就进入系统的命令行提示符了。到这里,你已经正式从“抱着板子插显示器”跨越到了“笔记本远程控制开发板”的模式。
4.3 首次 SSH 登录与账户设置
刚登录进去,第一件事不是急着装环境,而是做几个基础的安全与易用设置:
passwd # 修改默认密码,别再用 nvidia/nvidia sudo timedatectl set-timezone Asia/Shanghai sudo apt update sudo apt upgrade -y改密码这件事容易被忽略。开发板如果接入局域网或公网,默认密码等于把系统裸奔给同一内网里的其他设备。文科生可能觉得无所谓,但做开发的人应该有这个习惯:任何连上网络的设备,默认凭据必须第一时间改掉。
另外注意 apt 源。Jetson Nano 是 ARM64 架构,系统默认使用的是ports.ubuntu.com而不是 x86 常见的archive.ubuntu.com。如果你想换国内源加速,必须使用ubuntu-ports源路径。以清华源为例,需要把/etc/apt/sources.list里的http://ports.ubuntu.com/ubuntu-ports/替换成https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/,千万不要把常见的 x86 源直接写进去,否则会报“无法定位软件包”。
NVIDIA 自家的 apt 源保留不动,因为 JetPack 底层的 CUDA、L4T 驱动都靠它更新。
4.4 配置无线网卡:省掉那根网线
有线连接稳定,但总要拖着一根线,实际项目里还是无线方便。Jetson Nano Developer Kit 板载没有无线网卡,需要自己加装。两种主流方案:
一是加装 M.2 无线网卡,B01 版本板载 M.2 Key E 插槽,推荐 Intel 8265NGW / 9260 这类型号,Ubuntu 内核自带驱动,开机直接识别,基本零折腾。缺点是需要拆开外壳、接天线,稍微有点动手门槛。
二是用 USB 无线网卡,即插即用不拆机。但芯片选择要谨慎,很多便宜网卡用的是 Realtek 芯片,Ubuntu 18.04 内核不原生支持,需要自己编译驱动,非常折腾。我踩过的坑是 RTL8811CU 这类芯片,官方驱动源码在 GitHub 上能找到,但编译过程中会因为内核头文件版本不匹配频频报错。所以如果你不想折腾驱动,买之前先问清楚芯片,或者直接选 Intel M.2 方案。
装好无线网卡并确认系统识别(ip addr能看到 wlan0)之后,用 NetworkManager 连接 WiFi:
nmcli dev wifi connect "你的SSID" password "你的密码"连接成功后ip addr show wlan0能看到分配的 IP。如果后续想让它开机自动重连,NetworkManager 默认会记住这个连接,一般不用额外配置。
4.5 固定 IP 与免密登录
路由器 DHCP 分配的 IP 不定期会变,对于需要经常 SSH 连接的开发板,固定 IP 省心不少。两种方式:
一种是在路由器后台给开发板的 MAC 地址绑定固定 IP,最简单,推荐。另一种是在开发板侧配置静态 IP,修改/etc/netplan/下对应的 yaml 文件。不同版本镜像下 netplan 文件名不一样,先ls /etc/netplan看你机器上实际存在的文件,然后类似这样配置以太网:
network: version: 2 renderer: NetworkManager ethernets: eth0: dhcp4: no addresses: - 192.168.1.101/24 gateway4: 192.168.1.1 nameservers: addresses: [192.168.1.1, 8.8.8.8]修改后执行sudo netplan apply生效。注意 Jetson 的 netplan 默认可能使用 NetworkManager 作为渲染器,如果你的系统没有 NetworkManager 而是 systemd-networkd,配置语法要相应调整,动手前先看看默认文件里是怎么写的。
免密登录是提升日常体验的另一个关键步骤。在笔记本上生成密钥并拷贝到开发板:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" ssh-copy-id nvidia@192.168.1.101之后ssh nvidia@192.168.1.101直接进入,不再提示输密码。进一步优化可在~/.ssh/config里加一段:
Host jetson HostName 192.168.1.101 User nvidia IdentityFile ~/.ssh/id_ed25519保存后,终端里输入ssh jetson即连,整个链路从此快到几乎无感。
5. 实测排错手册:我在控制链路中踩过的坑
5.1 供电不足引起的神秘重启
这是 Jetson Nano 新手最容易踩、也最隐蔽的一个坑。开发板有两个供电入口:一个 DC 圆口(5V 4A 推荐),一个 Micro USB(5V 2A 甚至更低)。我用 Micro USB 供电时,系统反复无常:轻载时能开机进入系统,一跑稍微重一点的命令直接黑屏重启,甚至 USB 外设识别异常。
后来换成官方推荐的 5V 4A DC 电源,所有症状消失。这里给新手一个判断法则:如果你的 Jetson Nano 无规律重启、外设时好时坏、跑程序时随机死机,优先怀疑电源,不要先去折腾软件。此外,USB 无线网卡、机械键盘、大功率风扇这些外设都会额外吃电流,电源余量一定要留足。
5.2 SSH 连接慢、密码错误、连不上
SSH 连不上是高频问题,我整理了几种常见场景:
| 症状 | 可能原因 | 处理方法 |
|---|---|---|
| 连接超时 | 网络不在同一网段、防火墙拦截 | 确认 ping 通;检查 IP、网关 |
| 连接被拒绝(Connection refused) | SSH 服务未启动 | 串口登录执行sudo systemctl start ssh |
| 密码正确却提示 Permission denied | 默认密码已被修改 | 通过串口passwd重置密码 |
| 输入密码后等很久才进 | DNS 反向解析超时 | 修改/etc/ssh/sshd_config加UseDNS no,重启 ssh |
| 之前能连、突然拒绝 | 开发板 IP 变了 | arp -a或路由器后台重新确认 IP |
其中UseDNS no这个优化很多人不知道。默认配置下 SSH 收到连接请求时会反查客户端域名,在无内网 DNS 或网络慢的环境下,每次登录会卡十几秒。修改后重启 ssh 服务,登录速度明显改善。
5.3 USB 无线网卡驱动折腾记录
我在一块基于 RTL8811CU 的 USB 网卡上浪费过一整个晚上。主板识别不到 wlan0,lsusb能看到设备但系统没有对应驱动。网上找的驱动源码编译时报错,原因是内核头文件路径不对。
排查过程中发现,必须先安装与当前内核版本匹配的 headers:
sudo apt install linux-headers-$(uname -r)然后再去编译驱动。即便如此,Realtek 驱动的编译脚本还会因为内核版本差异报各种错,建议尽量绕开这种网卡。实在要用 USB 方案,优先选择芯片为 Atheros、MediaTek 中内核原生支持的型号,这类网卡插上就能用,不用编译。把这些踩过的驱动经历总结成一句话:USB 网卡不是不能用,但购买之前一定要确认芯片在 Ubuntu 18.04 内核里有没有现成驱动,别只看京东页面上的“免驱”宣传。
5.4 SD 卡空间与性能问题
系统镜像默认烧录后根分区,正常情况下首次开机会自动扩展到整张 SD 卡。如果发现df -h显示根分区只有十几 GB,而你的卡是 64GB,说明扩展没生效,需要手动处理:
sudo growpart /dev/mmcblk0 1 sudo resize2fs /dev/mmcblk0p1growpart如果没装,先sudo apt install cloud-guest-utils。不过这要求 root 分区本身没问题,建议操作前先检查lsblk确认分区布局。
另外,劣质 SD 卡是系统卡顿、数据损坏的重要源头。跑 AI 推理时,模型加载本身就是大量随机读,卡的 IO 性能直接体现在启动速度和程序加载速度上。这也是我前面建议买 A1 级品牌卡的原因,省几十块钱后面得用几倍时间补回来。
5.5 常见故障速查表
我把控制链路搭建过程中最容易出现的故障按现象和定位整理成一张速查表,方便你有问题的时候直接对号入座:
| 现象 | 定位方向 | 处理动作 |
|---|---|---|
| 上电无输出、电源灯不亮 | 电源适配器 / SD 卡 | 换 DC 5V4A 电源;重新插拔 SD 卡 |
| 串口只有启动日志、卡在登录前 | rootfs 扩展未完成 / SD 卡故障 | 等待更长时间;换卡重刷 |
| 串口有输出但是乱码 | 波特率不对 | 统一使用 115200 8N1 |
| 屏上启动正常但笔记本 ping 不通 | 网线或 IP 网段问题 | 确认网线链路;检查 IP 是否在同一网段 |
| SSH 端口不通但 ping 通 | ssh 服务未启动 | 串口登录后启用并enable |
| wlan0 不存在 | 无线网卡驱动未加载 | 换原生驱动支持的网卡;或加装 Intel M.2 卡 |
| apt 源更新极慢或 404 | 源路径写错架构 | 确认使用ports.ubuntu.com/ubuntu-ports |
6. 控制链路搭好之后,下一步该往哪走
6.1 先学会传文件:scp / rsync 与 VS Code Remote
控制链路打通之后,下一个高频需求是文件传输。模型权重、数据集、代码脚本,都不可能在开发板上敲出来,都是从笔记本传过去的。
单文件传输用scp最直接:
scp ./my_model.pt nvidia@192.168.1.101:~/project/大量文件、反复同步用rsync,支持断点续传和增量,体验远好于 scp:
rsync -avz --progress ./dataset/ nvidia@192.168.1.101:~/dataset/日常写代码则建议直接用 VS Code 的 Remote-SSH 插件,连上 Jetson 后直接在笔记本的 IDE 里编辑开发板上的文件,终端、文件树、调试器全部远程工作。第一次连接时 VS Code Server 会在开发板上自动下载对应 aarch64 架构的版本,如果下载慢,需要手动在开发板上配置代理或离线安装 server 包。这也是一个容易被卡住的细节。
6.2 后续系列内容预告:AI 推理项目的前置条件
把这一套控制链路彻底跑通之后,Jetson Nano 才真正变成一个“可以安静地放在角落里的 AI 边缘计算单元”。这个系列的后续内容,我会围绕具体实战项目展开:从 CSI 摄像头接入、Python 环境与 CUDA 库的验证,到 YOLOv5 模型部署和 TensorRT 加速推理,再到如何用笔记本远程拉取推理结果、控制拍照和录像。
这些内容共同的前提,就是你得能稳定、快速、任意时刻地从笔记本连接到这块开发板。所以不要嫌第一篇基础,控制链路稳不稳,直接决定后续每一个项目跑起来顺不顺。花半小时把这些细节一次配好,后面能省出大把时间用在真正有挑战的地方。