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.rhkb.cn/news/408317.html

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

相关文章

【笔记篇】Davinci Configurator SomeIpXf模块

目录 1 简介1.1 架构概览2 功能描述2.1 特性2.2 初始化2.3 状态机2.4 主函数2.5 故障处理3 集成4 API描述5 配置1 简介 本文主要描述了AUTOSAR SomeIpXf模块的功能。 SomeIpXf主要用途是对数据进行SOME/IP格式的序列化和反序列化。 1.1 架构概览 SomeIpXf在AUTOSAR软件架构…

【python】OpenCV—Single Human Pose Estimation

文章目录 1、Human Pose Estimation2、模型介绍3、基于图片的单人人体关键点检测4、基于视频的单人人体关键点检测5、左右校正6、关键点平滑7、涉及到的库函数scipy.signal.savgol_filter 8、参考 1、Human Pose Estimation Human Pose Estimation&#xff0c;即人体姿态估计&…

sqli-labsSQL手工注入第26-30关

第26关 一.查询数据库 http://127.0.0.1/Less-26/?id11%27%26extractvalue(1,concat(%27~%27,database(),%27~%27))%261%27 二.查表 http://127.0.0.1/Less-26/?id1%27||(updatexml(1,concat(1,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(…

2月公开赛Web-ssrfme

考点&#xff1a; redis未授权访问 源码&#xff1a; <?php highlight_file(__file__); function curl($url){ $ch curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);echo curl_exec($ch);curl_close($ch); }if(isset($_GET[url…

qt的model view 使用示范

首先在ui界面拖一个tableView ui->tableView->setModel(mission_model); 然后设置model的qss&#xff0c;并用view绑定model void SettingWidget::init_missionmodel(QString plane_type, QString mission_name) {if(mission_model)delete mission_model;mission_model…

论文导读 | 大语言模型中应用到的强化学习算法

摘要 在最近取得广泛关注的大规模语言模型&#xff08;LLM&#xff09;应用强化学习&#xff08;RL&#xff09;进行与人类行为的对齐&#xff0c;进而可以充分理解和回答人的指令&#xff0c;这一结果展现了强化学习在大规模NLP的丰富应用前景。本文介绍了LLM中应用到的RL技术…

【GH】【EXCEL】P6: Shapes

文章目录 componentslinepicture components line picture Picture A Picture object Input parameters: Worksheet (Generic Data) A Worksheet, Workbook, Range Object, Excel Application, or Text Worksheet NameName (Text) An optional object nameLocation (Point) A p…

Eclipse SVN 插件在线下载地址

Eclipse SVN 插件 Subversive 在线安装 1、选择help下的install new software 2、点击 add 3、Name随便写&#xff0c;Location输入&#xff1a; https://download.eclipse.org/technology/subversive/4.8/release/latest/ 点击Add 4、然后一直下一步&#xff0c;Finish&am…

Vue的计算属性:methods方法、computed计算属性、watch监听属性

1、methods 方法 在创建的 Vue 应用程序实例中&#xff0c;可以通过 methods 选项定义方法。应用程序实例本身会代理 methods 选项中的所有方法&#xff0c;因此可以像访问 data 数据那样来调用方法。 【实例】在 Vue 应用程序中&#xff0c;使用 methods 选项定义获取用户信…

鸿蒙内核源码分析(gn应用篇) | gn语法及在鸿蒙中巧夺天工

gn是什么? gn 存在的意义是为了生成 ninja,如果熟悉前端开发,二者关系很像 Sass和CSS的关系. 为什么会有gn,说是有个叫even的谷歌负责构建系统的工程师在使用传统的makefile构建chrome时觉得太麻烦,不高效,所以设计了一套更简单,更高效新的构建工具gnninja,然后就被广泛的使用…

《机器学习》—— 通过下采样方法实现逻辑回归分类问题

文章目录 一、什么是下采样方法&#xff1f;二、通过下采样方法实现逻辑回归分类问题三、下采样的优缺点 一、什么是下采样方法&#xff1f; 机器学习中的下采样&#xff08;Undersampling&#xff09;方法是一种处理不平衡数据集的有效手段&#xff0c;特别是在数据集中某些类…

【每日一题】【区间合并】【贪心 模拟】多米诺骨牌 牛客小白月赛99 E题 C++

牛客小白月赛99 E题 多米诺骨牌 题目背景 牛客小白月赛99 题目描述 样例 #1 样例输入 #1 3 6 1 1 1 1 3 2 1 4 3 2 7 9 11 6 2 1 1 1 3 2 1 4 3 2 7 9 11 5 4 1 4 1 1 2 1 2 3 6 8样例输出 #1 3 6 5做题思路 按照玩多米诺骨牌的方式。 先将多米诺骨牌按照骨牌位置从小…

Python二级知识点

在阅读之前&#xff0c;感谢大家的关注和点赞。祝你们都能心想事成、健健康康。 一.数据流程图 一般这道题是经常考的&#xff0c;有向箭头--->表示数据流。圆圈○表示加工处理。 二.字典如何比较大小 字典类型是如何比较大小的呢&#xff0c;是使用字典的键来比较大小&…

redis | Django小项目之Mysql数据库和Redis缓存的应用

Django小项目 需求整体架构图技术细节环境配置各文件配置settings.pyurls.pyviews.pyuser_update.html 结果相关代码补充r.hgetall(cacahe_key)new_data {k.decode():v.decode() for k,v in data.items()} 需求 整体架构图 技术细节 环境配置 django-admin startprojrct rmysi…

zdppy+vue3+onlyoffice文档管理系统实战 20240823上课笔记 zdppy_cache框架的低代码实现

遗留问题 1、封装API2、有账号密码3、查询所有有效的具体数据&#xff0c;也就是缓存的所有字段 封装查询所有有效具体数据的方法 基本封装 def get_all(self, is_activeTrue, limit100000):"""遍历数据库中所有的key&#xff0c;默认查询所有没过期的:para…

深度学习一(Datawhale X 李宏毅苹果书 AI夏令营)

一&#xff0c;机器学习基础 机器学习&#xff08;Machine Learning, ML&#xff09;是让机器具备学习能力的过程&#xff0c;其核心在于使机器能够自动寻找并应用复杂的函数&#xff0c;以解决各种任务如语音识别、图像识别和策略决策&#xff08;如AlphaGo&#xff09;。这些…

顺序表的顺序表示—动态分配

顺序表的顺序表示—动态分配 代码实现 #include <stdio.h> #include <stdlib.h> #define InitSize 15 // 初始化扩容长度typedef struct{int *data; // 动态分配数组的指针int MaxSize;int length; // 当前长度 }SeqList;void InitList(SeqList &L){// 申请一…

得峰(Deffad)A17G本本 - 安装debian12

文章目录 得峰(Deffad)A17G本本 - 安装debian12概述笔记电源插头设置硬件参数修复win10预装的软件列表做debain12的安装U盘从U盘启动引导用U盘装debian12通过U盘安装debian12到本本原有硬盘上成功配置debian12备注备注END 得峰(Deffad)A17G本本 - 安装debian12 概述 和同学讨…

YOLOv9改进策略【卷积层】| 利用MobileNetv4中的UIB、ExtraDW优化RepNCSPELAN4

一、本文介绍 本文记录的是利用ExtraDW优化YOLOv9中的RepNCSPELAN4&#xff0c;详细说明了优化原因&#xff0c;注意事项等。ExtraDW是MobileNetv4模型中提出的新模块&#xff0c;允许以低成本增加网络深度和感受野&#xff0c;具有ConvNext和IB的组合优势。可以在提高模型精度…

uni-app项目搭建和模块介绍

工具:HuilderX noed版本:node-v17.3.1 npm版本:8.3.0 淘宝镜像:https://registry.npmmirror.com/ 未安装nodejs可以进入这里https://blog.csdn.net/a1241436267/article/details/141326585?spm1001.2014.3001.5501 目录 1.项目搭建​编辑 2.项目结构 3.使用浏览器运行…