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.mfbz.cn/a/876340.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络】网络通信中的端口号

文章目录 一、引入端口号二、端口号的作用三、端口号的确定 在TCP/IP协议中,传输层有两个重要的协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP用于提供可靠的数据传输,而UDP则适合用于广播…

打造下一个AI拥抱视频热潮:从CloneAI的成功中汲取灵感

在科技与创意的交汇点,CloneAI以其敏锐的洞察力和高效的执行力,在短时间内迅速崛起,成为App Store的明星应用。其成功不仅在于抓住了AI技术的浪潮,更在于精准地利用了社交媒体的趋势,创造了一个独特的用户体验。对于希望复刻这一成功的开发者们来说,CloneAI的经验无疑是一…

QT多线程编程(基础概念以及示例)

QT多线程编程 前言:基础夯实:一:多线程概述二:QT多线程的使用1. 继承QThread类2. 继承QObject类3. QtConcurrent模块 三:线程同步与通信四:线程安全五:线程管理六:总结 效果展示:实现功能:核心代码:mainwindow.hmythre…

网络穿透:TCP 打洞、UDP 打洞与 UPnP

在现代网络中,很多设备都处于 NAT(网络地址转换)或防火墙后面,这使得直接访问这些设备变得困难。在这种情况下,网络穿透技术就显得非常重要。本文将介绍三种常用的网络穿透技术:TCP 打洞、UDP 打洞和 UPnP。…

SQL Server数据库简单的事务日志备份恢复

模拟数据库备份恢复过程 1.基础操作 1.创建TestDB数据库,并添加数据 USE [master] GO CREATE DATABASE TestDB CONTAINMENT NONE ON PRIMARY ( NAME NTestDB, FILENAME ND:\TestDB.mdf , SIZE 8192KB , MAXSIZE UNLIMITED, FILEGROWTH 65536KB ) LOG ON ( …

什么是API网关(API Gateway)?

1. 什么是API网关(API Gateway)? 在微服务体系结构中,客户端可能与多个前端服务进行交互。 API 网关位于客户端与服务之间。 它充当反向代理,将来自客户端的请求路由到服务。 它还可以执行各种横切任务,例…

GHOST重装后DEF盘丢失:深度解析与高效数据恢复方案

在数字信息爆炸的时代,数据安全与恢复成为了每个计算机用户必须面对的重要课题。GHOST作为系统备份与恢复领域的佼佼者,以其快速、便捷的特点赢得了广泛的用户基础。然而,在使用GHOST进行系统重装的过程中,不少用户遭遇了DEF盘&am…

【信创】Linux上图形化多ping工具--gping的编译安装与打包 _ 统信 _ 麒麟 _ 方德

原文链接:【信创】图形化多ping工具gping的编译安装与打包 | 统信 | 麒麟 | 方德 Hello,大家好啊!今天给大家带来一篇关于在Linux操作系统上使用gping的文章。gping是一款非常实用的命令行工具,它将传统的ping命令进行了可视化改进…

【大数据方案】智慧大数据平台总体建设方案书(word原件)

第1章 总体说明 1.1 建设背景 1.2 建设目标 1.3 项目建设主要内容 1.4 设计原则 第2章 对项目的理解 2.1 现状分析 2.2 业务需求分析 2.3 功能需求分析 第3章 大数据平台建设方案 3.1 大数据平台总体设计 3.2 大数据平台功能设计 3.3 平台应用 第4章 政策标准保障体系 4.1 政策…

Java设计模式—面向对象设计原则(五) ----->迪米特法则(DP) (完整详解,附有代码+案例)

文章目录 3.5 迪米特法则(DP)3.5.1 概述3.5.2 案例 3.5 迪米特法则(DP) 迪米特法则:Demeter Principle,简称DP 3.5.1 概述 只和你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to stranger…

【开放词汇检测】MM-Grounding-DINO论文翻译

摘要 Grounding-DINO 是一种先进的开放式检测模型,能够处理包括开放词汇检测(Open-Vocabulary Detection,OVD)、短语定位(Phrase Grounding,PG)和指代表达理解(Referring Expressio…

人脸防伪检测系统源码分享

人脸防伪检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

(c++)用取模符%、除运算判断是否是某个数的倍数,判断个位十位是否有某个数

结果易懂&#xff0c;但凡和7有关&#xff0c;都输出相应的关系。关系分为三种&#xff0c;7的倍数&#xff0c;十位是7&#xff0c;个位是7 #include<iostream>using namespace std;int main() {for (int num 1; num < 100; num){if (num % 7 0)//是7的倍数{cout …

Android 13 固定systemUI的状态栏为黑底白字,不能被系统应用或者三方应用修改

目录 一.背景 二.思路 三.代码流程 1.colos.xml自定义颜色 2.设置状态栏的背景颜色 3.对View进行操作 ①.对Clock(状态栏左侧的数字时钟)进行操作 ②.对电池(BatteryMeterView)进行操作 4.锁屏状态栏 5.patch汇总 一.背景 客户需求将状态栏固定成黑底白字,并且不能让系…

Unity教程(十五)敌人战斗状态的实现

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

Pytest配置文件pytest.ini如何编写生成日志文件?

1、新建pytest.ini文件 [pytest] log_clitrue log_leveLNOTSET log_format %(asctime)s %(levelname)s %(message)s %(filename)s %(funcName)s %(lineno)d log_date_format %Y-%m-%d %H:%M:%Slog_file ./logdata/log.log log_file_level info log_file_format %(asctime…

【6大设计原则】迪米特法则:解密软件设计中的“最少知识原则”

引言 在软件设计中&#xff0c;设计原则是指导我们构建高质量、可维护系统的基石。迪米特法则&#xff08;Law of Demeter&#xff0c;LoD&#xff09;&#xff0c;也被称为“最少知识原则”&#xff0c;是六大设计原则之一。它强调对象之间的松耦合&#xff0c;确保系统的各个…

爬虫代理API的全面解析:让数据抓取更高效

在大数据时代&#xff0c;网络爬虫已经成为收集和分析数据的重要工具。然而&#xff0c;频繁的请求会导致IP被封禁&#xff0c;这时候爬虫代理API就显得尤为重要。本文将详细介绍爬虫代理API的作用、优势及如何使用&#xff0c;帮助你更高效地进行数据抓取。 什么是爬虫代理AP…

注解(Java程序的一种特殊“注释”,用于工具处理的标注)

1.使用注解 a.含义 i.注解是放在类&#xff0c;字段&#xff0c;方法&#xff0c;参数前的一种特殊“注释”。 ii.注释会被编译器直接忽略&#xff0c;注解则可以被编译器打包带进class文件&#xff0c;因此&#xff0c;注解是一种用于标注的“元数据”。 iii…

设计模式之建造者模式(通俗易懂--代码辅助理解【Java版】)

文章目录 设计模式概述1、建造者模式2、建造者模式使用场景3、优点4、缺点5、主要角色6、代码示例&#xff1a;1&#xff09;实现要求2&#xff09;UML图3)实现步骤&#xff1a;1&#xff09;创建一个表示食物条目和食物包装的接口2&#xff09;创建实现Packing接口的实体类3&a…