3、无线网络配置:配置Wi-Fi客户端模式(STA)、AP热点模式,使用wpa_supplicant连接企业级WPA2-Enterprise网络

无线网络配置,说实话,是Jetson边缘计算节点里最容易出幺蛾子的环节。你想想看,一个设备要跑到各种现场去,有的地方只有Wi-Fi,有的地方要自己当热点,还有的企业网络用的是那种带证书的WPA2-Enterprise。嗯,今天我们就把这三种场景一次性讲透。

3.1 先搞清楚你的无线网卡

在动手之前,我建议你先确认一下Jetson上装的是什么无线网卡。Nano和TX2系列通常自带一个Broadcom或Realtek的Wi-Fi模块,而Xavier NX和Orin系列有些是带Intel AX200/210的。不同的芯片,驱动和工具链略有差异。

我个人习惯先用这个命令看看无线接口叫什么:

iw dev

一般会看到 wlan0 或者 mlan0。如果啥都没有,先检查驱动:

lsmod | grep wifi
lspci | grep -i network

我在项目中遇到过一块Jetson Nano,买回来Wi-Fi死活不工作,后来发现是天线没接好。嗯,硬件问题有时候比软件更坑。

3.2 客户端模式(STA):让Jetson连上家里的Wi-Fi

STA模式,说白了就是让Jetson像手机一样去连一个已有的Wi-Fi热点。这是最常用的场景——设备部署在客户现场,需要连上他们的局域网。

3.2.1 用nmcli快速配置(推荐新手)

如果你用的是Ubuntu桌面版或者安装了NetworkManager,最简单的方式是:

nmcli dev wifi connect "你的SSID" password "你的密码"

连上之后,用 ip a 看看有没有拿到IP。如果没拿到,手动DHCP一下:

sudo dhclient wlan0

3.2.2 用wpa_supplicant手动配置(更可控)

我个人更倾向于用wpa_supplicant,尤其是在嵌入式环境里。为什么呢?因为NetworkManager有时候会自作主张,而wpa_supplicant让你完全掌控连接过程。

先创建一个配置文件,比如 /etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
update_config=1
country=CN

network={
    ssid="MyHomeWiFi"
    psk="mypassword"
    key_mgmt=WPA-PSK
}

然后启动:

sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
sudo dhclient wlan0

小技巧: 如果你不确定密码对不对,可以用 wpa_passphrase "SSID" "密码" 生成加密后的配置,直接粘贴进去。这样密码不会明文存储。

3.3 企业级WPA2-Enterprise:最头疼的部分

企业网络,说白了就是那种需要用户名+密码,甚至还要证书的Wi-Fi。我在某大型工厂部署时遇到过,他们的网络用的是PEAP+MSCHAPv2认证,折腾了我一下午。

配置文件和普通Wi-Fi不一样,关键在 key_mgmteap 字段。下面是一个典型的企业网络配置:

network={
    ssid="EnterpriseWiFi"
    key_mgmt=WPA-EAP
    eap=PEAP
    identity="your_username"
    password="your_password"
    phase2="auth=MSCHAPV2"
    ca_cert="/etc/certs/ca.pem"
}

注意: 如果企业网络用了自签名证书,记得把CA证书放到Jetson上,并在配置里指定 ca_cert 路径。否则会报证书验证失败。我曾经因为忘了这步,排查了半小时。

如果不需要证书验证(比如测试环境),可以加一行:

phase1="peapver=0"
ca_cert="/etc/ssl/certs/ca-certificates.crt"

启动方式和前面一样:

sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
sudo dhclient wlan0

连上之后,用 wpa_cli status 查看连接状态。如果看到 wpa_state=COMPLETED,说明认证成功了。

3.4 AP热点模式:让Jetson自己当路由器

有时候现场没有现成的Wi-Fi,或者你需要让手机直接连到Jetson上调试。这时候就要开AP模式。Jetson当热点,说白了就是把它变成一个迷你路由器。

3.4.1 安装必要的软件

sudo apt update
sudo apt install hostapd dnsmasq

3.4.2 配置hostapd

编辑 /etc/hostapd/hostapd.conf

interface=wlan0
driver=nl80211
ssid=Jetson-AP
hw_mode=g
channel=6
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

关键点: 密码至少8位,channel建议选1、6、11中的一个,干扰少。我一般用channel 6。

3.4.3 配置dnsmasq(DHCP服务器)

编辑 /etc/dnsmasq.conf

interface=wlan0
dhcp-range=192.168.4.2,192.168.4.100,255.255.255.0,24h

3.4.4 给wlan0配个静态IP

sudo ifconfig wlan0 192.168.4.1 netmask 255.255.255.0 up

3.4.5 启动服务

sudo systemctl start hostapd
sudo systemctl start dnsmasq

这时候用手机搜一下,应该能看到 Jetson-AP 这个热点。连上去,IP会自动分配为192.168.4.x段。

避坑指南: 我曾经遇到过hostapd启动失败,原因是NetworkManager在抢网卡控制权。解决办法是停掉NetworkManager对wlan0的管理:nmcli dev set wlan0 managed=no。或者干脆 systemctl stop NetworkManager

3.5 双模式切换:STA和AP共存?

有些场景下,你希望Jetson既连外网(STA),又开热点让其他设备连进来(AP)。这需要网卡支持虚拟接口。不是所有网卡都行,Intel AX200可以,但很多Realtek不行。

如果支持,可以这样:

iw dev wlan0 interface add wlan1 type __ap

然后wlan0做STA连外网,wlan1做AP开热点。配置方法和上面一样,只是接口名不同。

个人经验: 双模式对CPU和内存有一定压力,Jetson Nano可能会有点吃力。Xavier NX和Orin系列就好很多。如果只是调试用,我建议还是单模式切换,别给自己找麻烦。

3.6 开机自启与持久化配置

配置好之后,肯定不希望每次重启都手动敲命令。我建议用systemd服务来管理。

创建一个服务文件 /etc/systemd/system/wifi-sta.service

[Unit]
Description=Wi-Fi STA Connection
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
ExecStartPost=/usr/bin/dhclient wlan0
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

然后启用:

sudo systemctl enable wifi-sta.service
sudo systemctl start wifi-sta.service

AP模式同理,把hostapd和dnsmasq设为开机自启就行:

sudo systemctl enable hostapd
sudo systemctl enable dnsmasq

嗯,到这里,Jetson的无线网络配置基本就齐了。STA模式让你连外网,AP模式让你当热点,企业级认证让你进那些严格的企业网络。这三种场景覆盖了90%以上的边缘计算部署需求。下次遇到Wi-Fi问题,先看看网卡驱动,再看看配置文件,基本都能搞定。