当前位置: 首页 > news >正文

Cubieboard2(五) 安装无线网卡驱动

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://www.mrgr.cn/news/27814.html

相关文章:

  • 店铺推推-项目测试用例设计(Xmind)
  • 浅谈“通感一体”
  • DVWA靶场通关——SQL Injection篇
  • 自顶向下逐步求精解决LeetCode第3307题找出第K个字符II题
  • 基于SSM的“汽车销售分析与管理系统”的设计与实现(源码+数据库+文档+PPT)
  • Go语言中的复合类型赋值:简化你的初始化过程
  • 软考中级网络工程师——第十二章
  • asio中的handler
  • 基于ssm+vue+uniapp的智能停车场管理系统小程序
  • 【数据结构与算法 | 每日一题 | 力扣篇】力扣1184
  • 滚雪球学SpringCloud[3.3讲]:Resilience4j:现代化的容错处理详解
  • Java 入门指南:JVM(Java虚拟机)—— 双亲委派模型(Parent Delegation Model)
  • Redis基础数据结构之 quicklist 和 listpack 源码解读
  • 请求响应-05.请求-日期参数JSON参数
  • 3286、穿越网格图的安全路径
  • node express 开启多进程
  • C/C++内存管理
  • Sprie for .net8.0填报项目验收材料
  • (批处理)设置延时+设置关机倒计时
  • 【Linux】多路转接epoll
  • 【智路】智路OS air-edge 开发者手册 功能概述
  • 人脸防伪检测系统源码分享
  • USB组合设备——串口+鼠标+键盘
  • web安卓逆向之必学CSS基础知识
  • 笔试强训day13
  • CentO S入门必备基础知识