1 前情提要
1.1 硬件情况
1)Cubieboard2:http://cubieboard.org/model/cb2/
Cubieboard2 是一个由珠海的 Cubietech 团队推出,采用全志 A20 处理器的开发板。
手头上的是生产于 2012.9.9 的是 MMC + SDCard 而非 dual_card 款,也是饱经风霜了。
2)无线网卡:
Tenda 生产的型号为 U2 v5.0 AX300 Wi-Fi6 高增益 USB 无线网卡。
- 3)CB2 与无线网卡组装图:
不相干的话:
(1)买无线网卡前以为房间没有可用网线接口,买完才发现有网口,那买都买了不折腾一下不是亏大了吗?
(2)开始折腾了发现网卡的 USB 公头短而延长部分太宽,无法插入到带盒子的 Cubieboard2 的 USB 母口上,那这不再整个 USB 转接头那我网卡不白买了吗?
(3)再买一个 USB 的直角转接头(本来想买 U 型的,脑海中 3D 建模一下发现 U 型的插上后,网卡天线要么水平,要么朝下),买回来后发现转接头的 USB 公头部分也短,没有什么是一把指甲刀解决不了的,打磨一下终于可以插上了。
(4)去官网下载 Linux 下的网卡驱动包,安装,报错,啊! —— 来自土拨鼠的嘶吼!
回过头去研究某宝的详情页,发现该网卡支持 Linux 内核版本为 V3.10-V6.2,而 CB2 的内核为 linux-3.4,那这不折腾一下那我网卡和 USB 转换头不白买了吗?
1.2 软件环境
- 1)OS 选择基于微软的 WSL(Windows Subsystem for Linux)的 Ubuntu 22.04
- 2)交叉编译工具链:arm-linux-gnueabihf-gcc 7.5.0 版本
- 3)Linux 源码:选择 v6.1-rc8(这里是我的一个误区,原以为这些 rc 版本是 v6.1 的升级版本,实际上 v6.1 才是包含 patch 的稳定版本,即应该直接选择 v6.1 版本)
- 4)U-Boot 源码:直接 master 分支
2 编译
具体的编译过程详见前置文章,这里记录一下其中的问题。
1)升级完内核后再安装无线网卡驱动包 ax300-wifi-adapter-linux-driver.deb,报错:
# 内核版本如下 uname -r 6.1.0-rc8-dirty 情况1:编译时出现以下错误 /lib/modules/6.1.0-rc8-dirty/build 目录不存在 情况2:安装头文件 apt-get install linux-headers-$(uname -r) E: Unable to locate package linux-headers-6.1.0-rc8-dirty 情况3:尝试安装 linux-headers-5.13.0-generic,并通过 ln 将软连接定位过来 编译成功,但使用 insmod 安装时出现 Invalid format module 问题 情况4:通过 make install_headers 将内核头文件安装上 依然报错:/lib/modules/6.1.0-rc8-dirty/build 目录不存在
2)山重水复间,观察驱动包安装时的日志,发现它会将驱动源码解压到 /usr/src/tenda/aic8800 目录,有源码就好办了。直接把驱动源码复制到 Linux 源码中编译即可,遇到的问题:
情况1:Kconfig:3: unknown statement "---help---" 应该是新版本 Kconfig 不兼容其中的 “--help--”,修改成 help 指令即可。
3)编译成功,且生成了无线网卡驱动,内核烧录见前置文章。
/usr/lib/modules/6.1.0-rc8-dirty/kernel/drivers/net/wireless/aic8800/aic_load_fw/aic_load_fw.ko /usr/lib/modules/6.1.0-rc8-dirty/kernel/drivers/net/wireless/aic8800/aic8800_fdrv/aic8800_fdrv.ko
3 安装驱动
1)重启系统后发现,两个驱动文件没有安装,配置开机自动进行驱动加载:
# 建立驱动 map 文件 depmod -a # 添加自动加载的驱动名(aic_load_fw 应该在 aic8800_fdrv 之前) echo "aic_load_fw" >> /etc/modprobe.d/aic8800.conf echo "aic8800_fdrv" >> /etc/modprobe.d/aic8800.conf
- 参考:https://blog.csdn.net/huiyuanliyan/article/details/120882037
2)重启后驱动正常加载,但是通过 ifconfig/iwconfig 命令依然看不到无线网卡,查看 /var/log/messages 日志,报错:
AICWFDBG(LOGINFO) ###Upload fmacfw patch 8800dc u02 bin firmware,180000 AICWFDBG(LOGINFO) ###Load file fmacfw patch 8800dc u02 bin AICWFDBG(LOGINFO) rwnx load firmware firmware path /lib/firmware/aic8800DC/fmacfw patch 8800dc u02 bin AICWFDBG(LOGERROR) rwnx load firmware:fmacfw patch 8800dc u02bin file failed to open AICWFDBG(LOGERROR) No such file or directory AICWFDBG(LOGINFO) load patch bin fail:-1
猜测这些 bin 文件应该是驱动的依赖库,去驱动的源码目录 find 一下,果然 /fw/aic8800DC/ 目录下由包含这个 bin 文件的一堆依赖文件,通过 scp 拷贝到 Cubieboard2 的对应目录。
3)在 /etc/network/interfaces.d/wlan0.conf 文件中配置自动获取 IP、WIFI 账户密码后,再次重启,通过 ifconfig/iwconfig 命令依然看不到无线网卡。依稀记得官方《安装驱动方法》文档中提到会出现系统识别是 U 盘的情况:
# 配置 /etc/network/interfaces.d/wlan0.conf auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp wpa-ssid "WIFI name" wpa-psk "WIFI password" # 查看所有挂载点 mount # 查看块设备 lsblk
mount 命令没有找到被挂载的网卡,块设备中倒是发现了它,3.7M 的那个就是
4)根据官方《安装驱动方法》文档提示,使用 eject /dev/sda1 弹出 U 盘,发现没有该命令,尝试安装:
apt-get install eject
奇怪,明明提示无法弹出,但结果确实弹出了。
5)再次通过 iwconfig 终于出现了无线网卡,不过名称有点奇怪,先修改下网络配置文件:
# 配置 /etc/network/interfaces.d/wlan0.conf auto wlxc83a35120088 allow-hotplug wlxc83a35120088 iface wlxc83a35120088 inet dhcp wpa-ssid "WIFI name" wpa-psk "WIFI password"
网卡名称为 wlxc83a35120088,根据该名称修改 /etc/network/interfaces.d/wlan0.conf 文件。
5)通过以下命令重启网络,结果:
systemctl restart networking
通过 ssh 测试,可以使用该网卡正常登录。
- 6)还剩最后一个问题:每次重启后,无线都被识别为 U 盘,需要通过 eject 指令弹出,再重启网络才能正常使用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。