1 前情提要

1.1 硬件情况

手头上的是生产于 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 指令弹出,再重启网络才能正常使用。

送南阳马生序
7 声望3 粉丝

余之业有不精、德有不成,非天质之卑,则心不若他之专耳,岂他人之过哉!