NanoPi M1 Armbian 配置 RTL8188GU USB WiFi
1. 下载并烧录 Armbian 系统
操作:
去 Armbian 归档站 http://fi.mirror.armbian.de/oldarchive/nanopim1/archive/ 下载
Armbian_21.08.1_Nanopim1_focal_current_5.10.60.img.xz。
烧录到 TF 卡,插入 NanoPi M1,接网线、电源。
为什么:
官方系统内核太老(4.14),Armbian 是社区维护的现代系统。选 focal 是因为它是 Ubuntu 20.04 用户空间,软件生态好。虽然初始内核是 5.10.60,但后续可以升级。归档站是因为官网不再直接展示旧板子镜像。
2. 首次启动并创建用户
操作:
用串口或 HDMI 登录。默认用户名 root,密码 1234。
系统强制要求改 root 密码,并创建普通用户,例如 user,设置密码。
为什么:
首次启动必须初始化。创建普通用户是为了日常安全操作,避免一直用 root。以后 SSH 登录用 user,需要管理员权限时加 sudo。
3. 确认系统版本
操作:
bash
cat /etc/os-release
cat /etc/armbian-release
为什么:
确认用户空间是 Ubuntu 20.04 Focal,Armbian 版本 21.08.1,板子 nanopim1。避免以后混淆 Debian/Ubuntu,也方便安装正确的软件包。
4. 确认有线网络
操作:
bash
ip a
看 eth0 是否有 inet 192.168.x.x。如果没有:
bash
sudo dhclient eth0
为什么:
后面所有安装(apt、git、编译工具)都需要网络。有线网是最稳定的入口。
5. 启用 SSH(默认已开)
操作:
Armbian 默认开启 SSH 服务且开机自启。在电脑上用 MobaXterm 或终端连接:
bash
ssh user@192.168.31.56
为什么:
SSH 是日常开发主力,资源占用极小。以后板子可以无头运行,不用接串口或显示器。
6. 安装 usb-modeswitch
操作:
bash
sudo apt update
sudo apt install -y usb-modeswitch usbutils
为什么:
RTL8188GU 出厂默认是 U 盘模式(0bda:1a2b),需要 usb_modeswitch 工具把它切换成 WiFi 模式(0bda:b711)。
7. 切换 USB 网卡模式
操作:
bash
sudo usb_modeswitch -KW -v 0bda -p 1a2b
lsusb
确认 ID 从 0bda:1a2b 变成 0bda:b711。
为什么:
不切换的话,系统只认它是一个 U 盘,不会加载 WiFi 驱动。
8. 检查旧内核驱动
操作:
bash
lsmod | grep rtl8xxxu
ip a
为什么:
初始内核 5.10.60 太老,自带的 rtl8xxxu 驱动不支持 RTL8188GU,所以看不到 wlan0。需要升级内核。
9. 升级内核到 6.18.44
操作:
bash
sudo apt update
sudo apt upgrade -y
遇到配置文件提示(如 /etc/issue)输入 Y 回车。
完成后:
bash
sudo reboot
重启后确认:
bash
uname -r
应显示 6.18.44-current-sunxi。
为什么:
新内核的 rtl8xxxu 驱动增加了对 RTL8188GU 的支持(2023 年后主线合并)。升级内核是解决驱动缺失最省事的方法。
10. 再次切换模式并检查驱动
操作:
bash
sudo usb_modeswitch -KW -v 0bda -p 1a2b
lsmod | grep rtl8xxxu
dmesg | tail -n 30
ip a
为什么:
重启后网卡可能又变回 DISK 模式,需要重新切换。
此时 lsmod 能看到 rtl8xxxu,但 dmesg 可能报 probe failed with error -11,且 ip a 没有 wlan0。说明主线驱动兼容性不好,需要社区驱动。
11. 安装 GCC 14
操作:
bash
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install -y gcc-14
gcc-14 --version
为什么:
内核是用 GCC 14.2 编译的,系统默认 GCC 是 9.4,版本不匹配会导致编译驱动时报 unrecognized command line option 错误。必须安装 GCC 14。
12. 克隆并编译社区驱动
操作:
bash
cd ~
git clone https://github.com/a5a5aa555oo/rtl8xxxu.git
cd rtl8xxxu
make clean
make CC=gcc-14 -j$(nproc)
成功生成 rtl8xxxu_git.ko。
为什么:
这个社区驱动专门修复了 RTL8188GU 的兼容性问题。用 CC=gcc-14 指定编译器,避免版本不匹配。
13. 安装并加载新驱动
操作:
bash
sudo make install
sudo depmod -a
sudo modprobe -r rtl8xxxu # 卸载内核自带旧驱动
sudo modprobe rtl8xxxu_git # 加载新驱动
ip a
应出现类似 wlx7454271ea36f 的无线接口。
为什么:
安装新模块到系统,刷新依赖,然后卸载旧驱动、加载新驱动。接口名带 wlx 和 MAC 地址是正常的。
14. 连接 WiFi
操作:
bash
sudo nmcli device wifi list
sudo nmcli device wifi connect "你的WiFi名称" password "你的密码"
ip a
无线接口应获取到 IP,例如 192.168.31.192。
为什么:
nmcli 是 NetworkManager 的命令行工具,方便连接和记忆网络。
15. 配置永久生效
操作:
15.1 驱动开机自动加载
bash
echo "rtl8xxxu_git" | sudo tee -a /etc/modules
15.2 屏蔽内核自带旧驱动
bash
echo "blacklist rtl8xxxu" | sudo tee -a /etc/modprobe.d/blacklist-rtl8xxxu.conf
15.3 自动切换 USB 模式
bash
sudo nano /etc/udev/rules.d/40-usb_modeswitch.rules
写入:
text
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0bda", ATTR{idProduct}=="1a2b", RUN+="/usr/sbin/usb_modeswitch -KW -v 0bda -p 1a2b"
保存后:
bash
sudo udevadm control --reload-rules
sudo udevadm trigger
为什么:
避免每次重启都要手动敲命令。自动加载驱动、屏蔽旧驱动、自动切换模式,让系统开机即用。
16. 测试脱离网线
操作:
拔掉网线,等几秒,用电脑 SSH 连接无线 IP:
bash
ssh user@192.168.31.192
能连上即成功。
为什么:
验证 WiFi 方案真正可用,以后机器人可以自由移动。
最终成功状态
- 硬件:NanoPi M1(全志 H3,1GB RAM)
- 系统:Armbian 21.08.1 Focal(Ubuntu 20.04)
- 内核:
6.18.44-current-sunxi - 驱动:社区编译的
rtl8xxxu_git - 无线接口:
wlx7454271ea36f - WiFi 连接:成功,IP
192.168.31.192 - 永久配置:udev 自动切换、
/etc/modules自动加载、黑名单屏蔽旧驱动
以后重启应能自动进入 WiFi 模式并连接网络,可拔掉网线用 SSH 继续开发。