WIFI驱动开发

news2024/9/20 18:28:12

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 Support
				  Enable 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-aic8800
  SUBMENU:=$(WIRELESS_MENU)
  TITLE:=aic8800 support (staging)
  DEPENDS:=+@IPV6 +@USES_AICSEMI
  KCONFIG:=\
    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=y

  FILES+=$(LINUX_DIR)/drivers/net/wireless/aic8800/aic8800_bsp/aic8800_bsp.ko
  FILES+=$(LINUX_DIR)/drivers/net/wireless/aic8800/aic8800_btlpm/aic8800_btlpm.ko
  FILES+=$(LINUX_DIR)/drivers/net/wireless/aic8800/aic8800_fdrv/aic8800_fdrv.ko
  AUTOLOAD:=$(call AutoProbe,aic8800_bsp aic8800_btlpm aic8800_fdrv)
endef

define KernelPackage/net-aic8800/description
 Kernel 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_daemon
	  sleep 2
	  wifi -o sta
}

stop() {
	printf "Stopping wifi_daemon: "
}

case "$1" in
    start)
	start
	;;
    stop)
	stop
	;;
    restart|reload)
	stop
	start
	;;
  *)
	echo "Usage: $0 {start|stop|restart}"
	exit 1
esac

exit $?
配置 WIFI 固件

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

Allwinner  --->
	Wireless  --->
		<*> wifimanager-v2.0................................... Tina wifimanager-v2.0
		-*- wirelesscommon............................. Allwinner Wi-Fi/BT Public lib

Firmware  ---> 
	<*> aic8800-firmware.................................... AIC aic8800 firmware

Kernel 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"
endif

if 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 debugfs
			  Bluetooth 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 driver

Device Drivers  --->
	Network device support  --->
		[*]   Wireless LAN  --->
			[*]   AIC wireless Support
				  Enable 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.coloradmin.cn/o/2069292.html

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

相关文章

动漫二次元漂亮的网站导航HTML5源码

二次元漂亮网站导航HTML源码&#xff0c;页面中还调用了很多外站的图片等链接需自行更换。 动漫二次元漂亮的网站导航HTML5源码

NASA:ARM 增强短波实验(ARESE)太阳辐射数据

目录 简介 摘要 代码 网址推荐 0代码在线构建地图应用 机器学习 ARM Enhanced Shortwave Experiment (ARESE) Solar Radiation Data 简介 ARESE 研究了晴朗和多云大气对太阳辐射的吸收。 测量使用了三个飞机平台&#xff1a;一架高空载人埃格雷特飞机、一架装有仪器的双…

百度地图SDK Android版开发 8 覆盖物示例2动画

百度地图SDK Android版开发 8 覆盖物示例2动画 前言动画相关的类和接口帧动画MarkerOptions 加载动画MarkerOptionsMarkerOptions.MarkerAnimateType 动画类型 Animation动画MarkerAnimation类及其子类AnimationTransformationRotateAnimationAlphaAnimationScaleAnimationSing…

二、Java变量

文章目录 一、变量介绍1.1 为什么需要变量1.2 变量的介绍1.4 变量使用注意事项 二、号的使用三、数据类型1.1 整数类型1.2 浮点类型1.3 字符类型(char)1.4 布尔类型&#xff1a;boolean 四、编码五、数据类型转换5.1 自动类型转换5.2 强制类型转换5.3 基本数据类型和String类型…

计算机毕业设计花卉交易管理系统

技术可行性 根据花卉交易管理的基本需求&#xff0c;该系统需要实现把商品的基本信息&#xff0c;销售信息等内容存放到数据库中&#xff0c;是典型的管理信息系统。管理信息系统是建立在现代信息技术基础之上&#xff0c;面向组织的全面管理和简单决策的信息系统[3]。其开发主…

K8S故障

故障显示 解决办法 kubectl -n kube-system edit deployments.apps coredns删除下列数据

探秘沙漠玫瑰:花语蕴含的爱与坚韧及其独特魅力

在广袤无垠的沙漠深处&#xff0c;隐藏着一种神秘而独特的植物——沙漠玫瑰。它宛如大自然遗落在荒漠中的珍宝&#xff0c;绽放着别样的光芒。当人们提及沙漠玫瑰时&#xff0c;首先想到的便是它那饱含深意的花语。那究竟沙漠玫瑰的花语中蕴含着怎样的浪漫与坚韧呢&#xff1f;…

景联文科技高质量文本标注:驱动自然语言处理技术的发展与应用

文本标注是自然语言处理&#xff08;NLP&#xff09;领域的一个重要环节&#xff0c;是指在文本数据上添加额外的信息或标记的过程&#xff0c;目的是为了让计算机能够理解和处理这些文本数据。 通过文本标注&#xff0c;可以为文本中的各个部分提供具体的含义和上下文信息&…

C++相关概念和易错语法(26)(decltype、nullptr、左值和右值、移动构造和移动赋值)

1.decltype “decltype(表达式) 变量名”可以定义变量&#xff0c;这个变量的类型是()括号内表达式的类型&#xff0c;注意这个表达式不会执行&#xff0c;只会推导这个表达式的类型&#xff0c;这点和sizeof一样 2.nullptr 根据#define NULL 0&#xff0c;可知NULL会被预处理…

搭建GAN对抗生成网络进行图像模态转换

生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;是一种强大的生成模型&#xff0c;它可以通过学习训练数据的分布来生成新的样本。在医学图像处理中&#xff0c;GANs被广泛用于图像模态转换&#xff0c;例如从MRI到CT的转换&#xff0c;这对于临床…

【牛客】两个字符串之间的最短距离

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️专栏&#xff1a;算法题 &#x1f397;️如何活着&#xff0c;是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://www.nowcoder.com/practice/2c6a0a8e1d20492f92941400036e0890 本道题是个模版…

uniapp+vue3的双向渐变

在App.vue中 <style lang"scss">/*每个页面公共css */ import common/style/common-style.scss </style> 在common-style.scss中 //全局双向渐变 .pageColor{background:linear-gradient(to bottom,rgba(0,0,0,0),#fff 400rpx),//到400rpx才做白色渐变…

解锁NGINX---SSL:打造安全、高效的网站加密体验

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

Spring Boot整合Sentry

Spring Boot整合Sentry Sentry搭建Sentry中新建项目集成SpringBoot1. 添加依赖2. 配置Sentry4. 日志集成&#xff08;可选&#xff09;5. 测试Sentry集成6. 配置实时告警配置Alert Settings配置警报规则 发送消息服务代码参照文档 Sentry 是一个日志平台&#xff0c;分为客户端…

WEB服务器的部署及优化

什么是 www&#xff1f; www 是 world wide web 的缩写&#xff0c;及万维网&#xff0c;也就是全球信息广播的意思 通常说的上网就是使用 www 来查询用户所需要的信息。 www 可以结合文字、图形、影像以及声音等多媒体&#xff0c;超链接的方式将信息以 Internet 传递到世界…

记录一下QGIS栅格操作-植被NDVI指数计算

记录一下QGIS栅格操作-植被NDVI指数计算 以计算植被NDVI指数为例&#xff0c;介绍QGIS栅格的相关操作以及应用。 NDVI 数据简介及下载 下载&#xff1a; 地理空间数据云https://www.gscloud.cn/search 选择波段4&#xff08;可见光红色波段&#xff09;和波段5&#xff08;近…

VS2022 - 制作自己的C#类库dll,并输出Unity识别的pdb调试信息文件

然后编写库代码&#xff0c;设置dll生成目录 *** 输出unity可以识别的pdb调试信息文件 *** 右键项目-属性-生成-高级-调试信息&#xff1a;可移植(Portable PDB) 这是因为Unity只能识别MDB和Portable PDB文件 这样设置后&#xff0c;把dll和pdb文件放入到Unity中同文件夹下&…

金融帝国实验室(Capitalism Lab)官方技术支持中文汉化包_v4.09

<FCT汉化小组>Vol.001号作品 ————————————— ◎ 作品名称&#xff1a;金融帝国实验室&#xff08;Capitalism Lab&#xff09;官方中文汉化包 ◎ 制作发布&#xff1a;FCT汉化小组 ◎ 发布版本&#xff1a;CapLab Simplified Chinese loc v4.09 ◎ 发布时…

django学习入门系列之第十点《初识 django》

文章目录 django初识django1 安装django2 创建django项目3 默认项目文件介绍4 APP 往期回顾 django Python知识点:函数、面向对象。前端开发: HTML、CSS、JavaScript、jQuery、BootStrap。MySQL数据库Python的Web框架Flask&#xff0c;自身短小精悍第三方组件。Django&#xf…

Linux驱动开发基础(SR501人体红外模块)

所学来自百问网 目录 1.模块简介 2.原理图及接线 3.设备树修改 4.驱动程序 5.应用程序 6.makefile 7.编译运行 1.模块简介 人体都有恒定的体温&#xff0c;一般在37度&#xff0c;所以会发出特定波长10uM左右的红外线&#xff0c;被动式红外探头就是靠探测人体发射的1…