WIFI驱动开发

Linux 4.9 内核驱动移植

Linux 4.9 BSP 内核驱动

下载驱动后获得驱动的 tar.gz 压缩包

在这里插入图片描述

解压后找到如下驱动与文件夹

在这里插入图片描述

进入内核,找到 linux-4.9/drivers/net/wireless 文件夹中,新建文件夹aic8800 并且把上面的驱动与文件夹放入刚刚创建好的 aic8800 中。

在这里插入图片描述

修改 linux-4.9/drivers/net/wireless/Kconfig ,增加一行

source "drivers/net/wireless/aic8800/Kconfig"

在这里插入图片描述

修改 linux-4.9/drivers/net/wireless/Makefile ,增加一行

obj-$(CONFIG_AIC_WLAN_SUPPORT) += aic8800/

在这里插入图片描述

进入内核配置页,找到并勾选如下选项。

Device Drivers  --->[*] Network device support  --->[*]   Wireless LAN  --->[*]   AIC wireless SupportEnable Chip Interface (SDIO interface support)  ---><M>   AIC8800 wlan Support<M>   AIC8800 bluetooth Support (UART)

在这里插入图片描述

编译后可以找到对应的驱动程序

在这里插入图片描述

其加载顺序是

insmod aic8800_bsp.ko
insmod aic8800_fdrv.ko
insmod aic8800_btlpm.ko

Linux 4.9 BSP 内核设备树

设备树配置如下,参考电路原理图,REG_ON 为 PE6,HOSTWAKE 为 PE7

wlan: wlan@0 {compatible    = "allwinner,sunxi-wlan";pinctrl-names = "default";clock-names   = "32k-fanout0";clocks        = <&clk_fanout0>;wlan_busnum   = <0x1>;wlan_regon    = <&pio PE 6 1 0x1 0x2 0>;wlan_hostwake = <&pio PE 7 14 0x1 0x2 0>;chip_en;power_en;status        = "okay";wakeup-source;
};

在这里插入图片描述

Tina SDK 移植

Tina SDK 基于OpenWrt 提供了一些自动化方案,可以参考 OpenWrt 的方法来移植这些驱动。

WIFI 固件移植

下载得到 aic8800-firmware.tar.gz 这里面包含着 WIFI 使用的固件

!> 注意,如果您的WIFI模块是 AIC8800D80 请下载 AIC8800D80 的固件(2024年4月后 WIFI 模块均升级为 AIC8800D80 模块)

在这里插入图片描述

解压后拷贝到 openwrt/openwrt/package/firmware/linux-firmware/aic8800 即可(Tina 5.0已经内置,客服给的4.0才需要这样)

在这里插入图片描述

然后找到 target/allwinner/v851se-common/modules.mk 文件,在末尾添加如下内容

define KernelPackage/net-aic8800SUBMENU:=$(WIRELESS_MENU)TITLE:=aic8800 support (staging)DEPENDS:=+@IPV6 +@USES_AICSEMIKCONFIG:=\CONFIG_AIC8800_BTLPM_SUPPORT=m \CONFIG_AIC8800_WLAN_SUPPORT=m \CONFIG_AIC_WLAN_SUPPORT=m \CONFIG_PM=y \CONFIG_RFKILL=y \CONFIG_RFKILL_PM=y \CONFIG_RFKILL_GPIO=yFILES+=$(LINUX_DIR)/drivers/net/wireless/aic8800/aic8800_bsp/aic8800_bsp.koFILES+=$(LINUX_DIR)/drivers/net/wireless/aic8800/aic8800_btlpm/aic8800_btlpm.koFILES+=$(LINUX_DIR)/drivers/net/wireless/aic8800/aic8800_fdrv/aic8800_fdrv.koAUTOLOAD:=$(call AutoProbe,aic8800_bsp aic8800_btlpm aic8800_fdrv)
endefdefine KernelPackage/net-aic8800/descriptionKernel modules for aic8800 support
endef$(eval $(call KernelPackage,net-aic8800))

通过这些内容可以使 Tina 自动去内核文件夹将 ko 打包进文件系统。

在这里插入图片描述

配置自动装载模块

修改文件:target/allwinner/v851se-tinyvision/busybox-init-base-files/etc/init.d/rc.modules 增加如下内容,每次开机的时候就会自动装载模块

#!/bin/sh
insmod /lib/modules/4.9.191/aic8800_bsp.ko
insmod /lib/modules/4.9.191/aic8800_fdrv.ko
insmod /lib/modules/4.9.191/aic8800_btlpm.ko
配置网络进程

新建文件 target/allwinner/v851se-tinyvision/busybox-init-base-files/etc/init.d/S50wifidaemon 写入如下内容,每次开机装载模块后便初始化WIFI和配置WIFI模式

#!/bin/sh
#
# Start wifi_daemon....
#start() {printf "Starting wifi_daemon....: "wifi_daemonsleep 2wifi -o sta
}stop() {printf "Stopping wifi_daemon: "
}case "$1" instart)start;;stop)stop;;restart|reload)stopstart;;*)echo "Usage: $0 {start|stop|restart}"exit 1
esacexit $?
配置 WIFI 固件

进入 Tina 配置页面,打开如下功能

Allwinner  --->Wireless  ---><*> wifimanager-v2.0................................... Tina wifimanager-v2.0-*- wirelesscommon............................. Allwinner Wi-Fi/BT Public libFirmware  ---> <*> aic8800-firmware.................................... AIC aic8800 firmwareKernel modules  --->Wireless Drivers  ---><*> kmod-net-aic8800............................... aic8800 support (staging)

测试

上电启动,可以看到 LOG 正常挂载 WIFI

在这里插入图片描述

可以看到正常初始化进程

在这里插入图片描述

Linux 5.15 内核驱动移植

Linux 5.15 内核驱动

下载驱动后获得驱动的 tar.gz 压缩包

在这里插入图片描述

解压后找到如下驱动与文件夹

在这里插入图片描述

由于 Linux 5.15 需要保证内核的主线化,不可将非主线的第三方驱动放置于内核文件夹中,所以将驱动放置于 bsp 文件夹中。

进入bsp,找到 bsp/drivers/net/wireless 文件夹中,新建文件夹aic8800 并且把上面的驱动与文件夹放入刚刚创建好的 aic8800 中。

在这里插入图片描述

修改 bsp/drivers/net/wireless/Kconfig ,增加一行

source "bsp/drivers/net/wireless/aic8800/Kconfig"

在这里插入图片描述

修改 bsp/drivers/net/wireless/Makefile ,增加一行

obj-$(CONFIG_AIC_WLAN_SUPPORT) += aic8800/

在这里插入图片描述

修改 bsp/drivers/net/wireless/aic8800/Kconfig,修改为 bsp 的索引
在这里插入图片描述

if AIC_WLAN_SUPPORT
source "bsp/drivers/net/wireless/aic8800/aic8800_fdrv/Kconfig"
source "bsp/drivers/net/wireless/aic8800/aic8800_btlpm/Kconfig"
endifif AIC_INTF_USB
source "bsp/drivers/net/wireless/aic8800/aic8800_btusb/Kconfig"
endif

进入内核配置页,找到并勾选如下选项。

[*] Networking support  ---><*>   Bluetooth subsystem support  --->[*]   Bluetooth Classic (BR/EDR) features (NEW)<*>     RFCOMM protocol support[*]       RFCOMM TTY support[*]   Bluetooth Low Energy (LE) features[*]   Export Bluetooth internals in debugfsBluetooth device drivers  ---><*> HCI UART driver[*]   UART (H4) protocol support-*-   Wireless  ---><*>   cfg80211 - wireless configuration API[ ]     nl80211 testmode command[ ]     enable developer warnings[ ]     cfg80211 certification onus[*]     enable powersave by default[ ]     cfg80211 DebugFS entries[*]     support CRDA[*]     cfg80211 wireless extensions compatibility <*>   Generic IEEE 802.11 Networking Stack (mac80211)<*>   RF switch subsystem support  --->[*]   RF switch input support<*>   GPIO RFKILL driverDevice Drivers  --->Network device support  --->[*]   Wireless LAN  --->[*]   AIC wireless SupportEnable Chip Interface (SDIO interface support)  ---><M>   AIC8800 wlan Support<M>   AIC8800 bluetooth Support (UART)Misc Devices Drivers  ---><*> Allwinner rfkill driver<*> Allwinner Network MAC Addess Manager

Linux 5.15 内核设备树

&rfkill {compatible = "allwinner,sunxi-rfkill";chip_en;power_en;pinctrl-0;pinctrl-names;status = "okay";/* wlan session */wlan {compatible    = "allwinner,sunxi-wlan";wlan_busnum   = <0x1>;wlan_regon    = <&pio PE 6 GPIO_ACTIVE_HIGH>;wlan_hostwake = <&pio PE 7 GPIO_ACTIVE_HIGH>;wakeup-source;};/* bt session */bt {compatible    = "allwinner,sunxi-bt";bt_rst_n      = <&pio PE 8 GPIO_ACTIVE_LOW>;};
};&addr_mgt {compatible     = "allwinner,sunxi-addr_mgt";type_addr_wifi = <0x0>;type_addr_bt   = <0x0>;type_addr_eth  = <0x0>;status         = "okay";
};&btlpm {compatible  = "allwinner,sunxi-btlpm";uart_index  = <0x2>;bt_wake     = <&pio PE 9 GPIO_ACTIVE_HIGH>;bt_hostwake = <&pio PE 10 GPIO_ACTIVE_HIGH>; /* unused */wakeup-source;status      = "okay";
};

编译时可以看到生成的对应的 ko 模块

在这里插入图片描述

测试

由于 Linux 5.15 不绑定 Tina,所以这里直接使用现成的 debian rootfs 来做测试。

使用上面编译出来的内核与ko驱动,并且将固件放置于 rootfs 对应的 /lib/firmware/ 文件夹中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】 黑马 MySQL进阶 笔记

文章目录 存储引擎MySQL的体系结构存储引擎概念存储引擎特点InnoDBMyISAMMemory 存储引擎选择 索引概述结构B Tree(多路平衡查找树)B TreeHash为什么InnoDB存储引擎选择使用Btree索引结构? 分类思考题 语法SQL性能分析&#xff08;索引相关&#xff09;SQL执行频率慢查询日志p…

SSRF和CSRF实战复现

文章目录 SSRFWeb-Hacking-Lab-master1、Centos未授权访问2、Ubuntu未授权访问3、Ubuntu传入公钥访问4、ssrf_redis_lab_pickle_redis_lab CSRF:windphp SSRF SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。 f…

Unity 波函数坍缩算法随机地图生成

Unity 波函数坍缩算法随机地图生成 波函数波函数基本概念位置空间波函数动量空间波函数两种波函数之间的关系波函数的本征值和本征态波函数坍缩 熵是什么熵作为状态函数时间之箭 实现原理举个例子&#xff1a;2D迷宫地图生成 Unity 如何实现前期准备单元格代码瓦片地图代码波函…

通过建模走出人工智能寒冬

很多人对 GenAI 是否会产生商业影响持怀疑态度&#xff0c;但我认为他们不仅错了&#xff0c;而且犯了 2001 年人们在互联网上犯下的错误。他们认为硅谷的炒作是无稽之谈&#xff0c;因此其背后的想法也是无稽之谈。 这是很危险的&#xff0c;我认为&#xff0c;这比大多数零售…

nacos 使用 docker 单机部署连接 MySQL 数据库并开启鉴权

文章目录 本地部署的配置启用鉴权(未验证) docker部署的配置修改docker 镜像源启用鉴权&#xff0c;必须添加如下环境变量如何生成鉴权的密钥 完整环境变量docker启动命令 本地部署的配置 文件结构 application.properties #配置文件 mysql-schema.sql …

WPS关闭后,进程依然在后台运行的解决办法

问题 wps启动后 在启动wps后&#xff0c;什么都不做&#xff0c;打开进程管理器&#xff0c;发现居然运行了3个wps进程&#xff1a; win10只会显示wps进程&#xff1a; win11显示比较准确&#xff1a; 关闭后 在关闭wps&#xff0c;再去任务管理器查看&#xff0c;发现在…

Python计算机视觉 第3章-图像到图像的映射

Python计算机视觉 第3章-图像到图像的映射 3.1 单应性变换 单应性变换&#xff08;Homography&#xff09;是计算机视觉中非常重要的一种几何变换&#xff0c;它用于将一个平面内的点映射到另一个平面内。具体来说&#xff0c;单应性变换可以描述一个图像在摄像机视角变化、…

vue3+vite+axios+mock从接口获取模拟数据实战

文章目录 一、安装相关组件二、在vite.config.js中配置vite-plugin-mock插件三、实现mock服务四、调用api接口请求mock数据方法一、直接使用axios 请求mock 数据方法二、对axios进行封装统一请求mock数据 五、实际运行效果 在用Vue.js开发前端应用时通常要与后端服务进行交互&a…

白酒与家庭聚会:温馨与和谐的时光

在繁忙的都市生活中&#xff0c;家庭聚会是每个人心中那份较温暖的港湾。每当夜幕降临&#xff0c;灯火通明&#xff0c;家人们围坐在一起&#xff0c;谈笑风生&#xff0c;那份温馨与和谐仿佛能够驱散一切疲惫。而在这个温馨的时刻&#xff0c;白酒——豪迈白酒&#xff08;HO…

Python 爬虫入门(十二):正则表达式「详细介绍」

Python 爬虫入门&#xff08;十二&#xff09;&#xff1a;正则表达式 前言一、正则表达式的用途二、正则表达式的基本组成元素2.1 特殊字符2.2 量词2.3 位置锚点2.4 断言2.5 字符集2.6 字符类2.6.1 基本字符类2.6.2 常见字符类简写2.6.3 POSIX字符类2.6.4 组合使用 三、 正则表…

如何使用ssm实现亿互游在线平台设计与开发+vue

TOC ssm118亿互游在线平台设计与开发vue 绪论 1.1研究背景 时代的发展&#xff0c;我们迎来了数字化信息时代&#xff0c;它正在渐渐的改变着人们的工作、学习以及娱乐方式。计算机网络&#xff0c;Internet扮演着越来越重要的角色&#xff0c;人们已经离不开网络了&#x…

2024世界机器人大会盛大开幕,卓翼飞思携无人智能领域产品集中亮相 !

开放创新 聚享未来&#xff01;万众瞩目的2024世界机器人大会暨博览会于8月21日在北京亦创国际会展中心盛大开幕。大会聚焦机器人技术与产业前沿趋势&#xff0c;展示机器人创新应用赋能千行百业的多元场景&#xff0c;全球顶尖的机器人科学家、行业领袖、创新精英汇聚一堂&…

使用HAL库实现按键控制LED和蜂鸣器

下载STM32CubeMX实现项目的初始配置&#xff08;寄存器操作)&#xff0c;下载keil对程序进行编译烧写 在STM32CubeMX中将PB0/PB1设置为输入引脚作为按键&#xff0c;PA6/PA4设置为输出引脚作为led和Beep&#xff0c;将按键引脚设置为上拉输入&#xff1a; 创建项目完成后在kei…

C语言 | Leetcode C语言题解之第365题水壶问题

题目&#xff1a; 题解&#xff1a; bool canMeasureWater(int jug1Capacity, int jug2Capacity, int targetCapacity) {int j1 jug1Capacity < jug2Capacity ? jug1Capacity : jug2Capacity, j2 jug1Capacity > jug2Capacity ? jug1Capacity : jug2Capacity;if (ta…

Umi-OCR 文字识别工具

免费开源的离线orc识别功能 git地址 感谢大佬的贡献 Umi-OCR 文字识别工具 使用说明 • 下载地址 • 更新日志 • 提交Bug 免费&#xff0c;开源&#xff0c;可批量的离线OCR软件 适用于 Windows7 x64 、Linux x64 免费&#xff1a;本项目所有代码开源&#x…

Verilog刷题笔记59

题目: Exams/m2014 q6c 解题&#xff1a; module top_module (input [6:1] y,input w,output Y2,output Y4);assign Y2y[1]&w0;assign Y4(y[2]&w1)|(y[3]&w1)|(y[5]&w1)|(y[6]&w1);endmodule结果正确: 注意点: 起初&#xff0c;我的代码有错误,代码如下…

9 正则表达式:Java爬虫和正则表达式、String中的正则表达式方法(基本语法7)

文章目录 前言一、正则表达式1 [ ] 语法(1)[ABC] 和 [^ABC](2)[A-Z]和[a-zA-Z]小总结2 特殊字符语法(\w 这些)3 数量符4 \ 、()、 |5 锚点 ^ 和 $,\b,\B6 (?i) : 忽略其后面的大小写 ---- 这个Java是可以的,其他语言我不知道(正则表达式虽然大多通用,但也有部分是…

视频检索技术为电子商务直播领域带来了前所未有的革新

视频检测在这个场景中指的是通过视频流实时识别和检索直播中销售人员展示的商品。这涉及到从连续的视频帧中分析和识别商品的视觉内容&#xff0c;通常与语音和文本数据结合&#xff0c;以提高识别准确性。 技术原理 文本引导的注意机制&#xff1a;这一机制通过直播中销售人员…

Prometheus学习

监控架构介绍&#xff1a; 基本架构&#xff1a; Prometheus 和 Zabbix 的对比&#xff1a; 安装和使用&#xff1a; Prometheus 采集、存储数据Grafana 用于图表展示alertmanager 用于接收 Prometheus 发送的警告信息node-exporter 用于收集操作系统和硬件信息的 metrics …

猫头虎 分享:Python库 Matplotlib 的简介、安装、用法详解入门教程

&#x1f42f; 猫头虎 分享&#xff1a;Python库 Matplotlib 的简介、安装、用法详解入门教程 今天猫头虎 带大家一起探索一个非常重要的 Python 库——Matplotlib。这是一个强大的工具&#xff0c;广泛应用于数据科学、人工智能和机器学习等领域&#xff0c;用于创建静态、动…