bash
# 以下命令都是在开发板执行, 不是在Ubuntu执行
# 1. 禁止系统自动启动wpa_supplicant,
# 否则后面执行"iw wlan0 link"时会提示"command failed: No such file or directory"
mv /etc/init.d/S45network-manager /root
reboot
# 2. 启动WIFI网卡
ifconfig wlan0 up
# 3. 查找SSID
iw dev wlan0 scan | grep SSID
# 4. 设置WIFI SSID和密码
# ssid_name 改为你的WIFI SSID
# your_password 改为你的WIFI密码
wpa_passphrase ssid_name your_password >> /etc/wpa_supplicant.conf
# 5. 连接WIFI
wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant.conf
等待出现: wlan0: link becomes ready
# 6. 查看连接状态
iw wlan0 link
# 7. 动态获取IP
udhcpc -i wlan0
# 8. 测试
ping news.qq.com
# 成功后,以后再次启动系统后,只需要执行第5、第7条命令即可连接WIFI
执行上述脚本的前提是开发板已经连接好WiFi天线了。不一定需要连接路由器,也可以连手机热点等等。
这段脚本的核心逻辑是:先"杀掉"系统自带的自动管理进程,手动接管 WIFI 控制权,然后连接网络并获取 IP。
下面为您进行详细的原理分析 ,最后给出清晰的操作步骤。
第一部分:深度原理分析(每一步是干嘛的?)
这套命令其实是在手动完成手机连接 WIFI 时后台默默做的所有事情。
1. 清理环境(避免冲突)
mv /etc/init.d/S45network-manager /root
reboot
- 原理 :开发板出厂的系统里,通常有一个开机自启脚本(
S45network-manager),它会自动尝试管理网络。这就好比有两个司机(自动程序和你自己)同时抢方向盘,会导致device or resource busy或者command failed错误。 - 动作 :把这个启动脚本移走(移到
/root相当于备份),让它开机找不到,从而禁用自动启动。重启后,网络控制权就全交给你了。
2. 激活硬件
bash
ifconfig wlan0 up
- 原理 :给无线网卡(
wlan0)通电并激活驱动。刚开机时网卡通常是"休眠"状态(DOWN),这一步把它变成 UP 状态。
3. 扫描信号(可选)
Bash
iw dev wlan0 scan | grep SSID
- 原理 :让网卡去听空中有哪些 WIFI 信号。
grep SSID是为了过滤掉杂乱的信息,只看 WIFI 名字。
4. 生成配置文件(核心步骤)
Bash
wpa_passphrase ssid_name your_password >> /etc/wpa_supplicant.conf
- 原理:WIFI 连接不能直接把明文密码发给路由器,需要加密。
- 工具 :
wpa_passphrase是一个计算器,它把你的 WIFI 名字和密码算成一段加密配置。 - 动作 :
>>符号把算出来的配置追加 写入到/etc/wpa_supplicant.conf文件里。这个文件就是你的"WIFI 钥匙串"。
5. 发起连接(Layer 2 链路层)
Bash
wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant.conf
- 原理 :
wpa_supplicant是 Linux 下最核心的 WIFI 认证程序(守护进程)。-B:在后台运行(Background),不占用当前终端。-i:指定网卡接口(interface)。-c:指定刚才生成的配置文件(config)。
- 结果 :只要提示
link becomes ready,说明密码正确,你的板子和路由器已经"握手"成功了。
6. 获取 IP 地址(Layer 3 网络层)
Bash
udhcpc -i wlan0
- 原理:连接成功后,板子还没有"门牌号"(IP 地址)。
- 工具 :
udhcpc是嵌入式常用的小型 DHCP 客户端。它会向路由器大喊:"给我分配个 IP!"。 - 结果:路由器回复一个 IP(例如 192.168.1.100),此时才能真正上网。
第二部分:详细操作步骤指南
请按照以下顺序在您的开发板串口终端中执行。
第一步:一次性配置(只有第一次需要做)
1. 禁用自动管理并重启
Bash
mv /etc/init.d/S45network-manager /root
reboot
(注意:执行完 reboot 后,开发板会重启,您需要重新连接串口终端)
第二步:准备连接
2. 启动网卡
Bash
ifconfig wlan0 up
3. (可选) 确认你要连的 WIFI 是否存在
Bash
iw dev wlan0 scan | grep SSID
第三步:生成 WIFI 密码文件
- 写入账号密码
⚠️ 注意: 请将下面的 你的WIFI名 和 你的WIFI密码 替换成真实的(保留双引号以防名字中有空格)。
Bash
# 这一行命令会覆盖旧的配置,重新生成一个新的
wpa_passphrase "你的WIFI名" "你的WIFI密码" > /etc/wpa_supplicant.conf
如果是追加第二个WIFI,可以用 >>,如果是第一次设置,建议用 > 覆盖。
第四步:正式连接
5. 启动连接进程
Bash
wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant.conf
观察终端输出,等待几秒,直到看到 wlan0: link becomes ready 之类的提示。
6. 检查连接状态
Bash
iw wlan0 link
如果显示 Not connected,说明密码错了或者信号不好;如果显示具体的 SSID 和频率,说明连接成功。
7. 自动获取 IP
Bash
udhcpc -i wlan0
成功的话,你会看到类似 Lease of 192.168.x.x obtained 的提示。
第五步:测试
8. Ping 测试
Bash
ping news.qq.com
如果有时间回复(time=xx ms),恭喜你,开发板已经连入互联网!
第三部分:以后重启了怎么办?
因为我们在第一步里禁用了自启动,所以下次断电重启后,WIFI 不会自动连。
您只需要执行下面 3 条命令 即可恢复网络(因为密码文件 /etc/wpa_supplicant.conf 已经保存好了):
Bash
ifconfig wlan0 up
wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant.conf
udhcpc -i wlan0