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

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/ 文件夹中

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • go中的并发处理
  • LEAP模型在能源环境发展、碳排放建模预测及分析中实践应用
  • 伏图芯片应力仿真功能介绍
  • 如何正确使用 Parallels Desktop 的快照功能
  • 分意图 Prompt 调试、后置判别改写、RLHF 缓解大模型生成可控性
  • Transformer模型:Position Embedding实现
  • GlusterFS-分布式文件系统:概念、案例
  • linux网络问题排查必须要懂的命令
  • 普元EOS-微前端的base基座介绍
  • 【0316】Postgres内核之VACUUM (FULL)运行 portal multi query (11)
  • python——requests
  • 解决Element-plus中Carousel(走马灯)图片无法正常加载的bug
  • react 路由创建与使用
  • WiFi的IP和电脑IP一样吗?怎么更改wifi的ip地址
  • 线段树+二分,CF 431E - Chemistry Experiment
  • __proto__ 和 prototype的关系
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Git学习与使用心得(1)—— 初始化
  • HashMap ConcurrentHashMap
  • input实现文字超出省略号功能
  • java多线程
  • Laravel核心解读--Facades
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Next.js之基础概念(二)
  • October CMS - 快速入门 9 Images And Galleries
  • 成为一名优秀的Developer的书单
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 实现简单的正则表达式引擎
  • - 转 Ext2.0 form使用实例
  • NLPIR智能语义技术让大数据挖掘更简单
  • scrapy中间件源码分析及常用中间件大全
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #APPINVENTOR学习记录
  • #include到底该写在哪
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (3)llvm ir转换过程
  • (8)STL算法之替换
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (HAL库版)freeRTOS移植STMF103
  • (vue)页面文件上传获取:action地址
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (第27天)Oracle 数据泵转换分区表
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (二十四)Flask之flask-session组件
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (四) Graphivz 颜色选择
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)、python程序--模拟电脑鼠走迷宫
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)JAVA中的堆栈
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比