本文主要是介绍realtek wifi驱动常见问题-可优化调整点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
俗话说好记性不如烂笔头,最近在新产品上使用realtek 8192 wifi芯片时,发现之前做过的一些优化,有些模糊,因此想在这里记录下当前和之后realtek相关的wifi驱动遇到的一些问题。
-----再牛逼的梦想,也抵不住傻逼般的坚持! --2024-03-28 10:46
文章目录
- 前言
- 一、驱动移植注意事项
- 二、驱动启动流程分析
- 初始化函数主要做的事情:
- wifi驱动的probe的过程
- 二、常见问题分析
- 问题1.
- 2.驱动优化处理
- 总结
前言
当下国内使用的wifi、ble主要有如下几个芯片厂商:realtek(瑞昱),broadcom(博通),乐鑫,物奇,南方硅谷等等,wifi通常分两种开发方式,一种是soc芯片多用于iot(物联网产品),使用rtos,rthread等实时操作系统,可以基于wifi模组进行二次开发;另外一种虽然wifi fw(固件)也是soc,但是fw一般由芯片厂商维护,需要挂在一个主控(ARM)芯片进行使用,主控与wifi模组通过sdio/usb进行交互,fw与主控端的wifi驱动进行交互,wifi驱动通过内核cfg80211或mac80211与开源库wpa_supplicant/hostapd进行交互。上层封装自己的业务通过wpa_supplicant/hostapd对wifi进行操作;(这里写的可能不清楚下面简单写下代码层次)
APP
wpa_supplicant / hostapd
cfg80211
mac80211 (wifi若是fullmac架构,则mac80211部分位于wifi驱动中)
wifi drv
fw
有点扯远了,回归正题,接下来从,驱动移植,常见问题处理,wifi相关优化几个方面来记录,本次以rtl8192fu为例,其他芯片一般都大同小异
一、驱动移植注意事项
一般来说编译指定kernel产物路径,ARCH,CROSS_COMPILE 即可,可以自己在外层写一个Makefile, 增加自己业务先关的编译选项,编译过程遇到问题,建议自行学习分析,哪里报错看哪里,不要怂,也不要担心解决不了,淦就完了,这个算是嵌入式基础了。
这里需要注意几个点:
1.驱动加载前,先通过cat /proc/bus/usb/devices查看wifi usb节点是否识别到。若未识别到,则需先排查硬件或主控usb驱动是否正常。
内核配置:
驱动配置:
驱动配置基本位于根目录下的Makefile
CONFIG_80211W 关闭该配置,该配置使用WPA3时才需要。
二、驱动启动流程分析
module_init(rtw_drv_entry);(入口)
module_exit(rtw_drv_halt);
找到这两个函数,就分别找到了初始化和退出函数
初始化函数主要做的事情:
(1)打开wifi模块的电源,会根据不同的平台不同的模块进行处理;
(2)初始化挂起锁,这个后边再分析,猜是防止多线程同时挂起模块时会引起模块问题;
(3)驱动注册标志位置1;
(4)注册usb驱动,因为我们的模块接口是USB接口的,所以对系统来说其实就是个USB设备,自然要注册usb驱动。
注册的usb驱动中主要提供的接口如下:
(1)probe探测函数
(2)disconnet函数
(3)idtable列表,表示支持的设备的PIDVID信息
(4)挂起和唤醒函数
wifi驱动的probe的过程
1.处理特殊设备
2.初始化dvobj_priv
3.初始化wlan0的无线网络节点:
(1)识别芯片的型号和硬件型号并记录在wlan0的接口描述结构体中;
(2)根据芯片型号将一些处理函数的地址赋给wlan0的描述结构体;
(3)为结构体的intf_start和intf_stop两个成员赋值,这两个函数会在ifconfig wlan0 up和down的时候被调用;
(4)将一些直接操作结构体的函数地址赋值到结构体中;
(5)获取芯片的版本信息,并从芯片的eeprom中读取芯片的mac地址等信息,赋值到结构体中;
(6)初始化一些software资源,这里需要进一步分析;
(7)设置mac地址。
二、常见问题分析
问题1.
问题描述:手机连接设备软ap热点,无数据传输,一段时间后自动断开
可能导致的问题:设备为软AP配网时,若手机连接设备AP热点,中间出现断连,手机很可能重新连接到路由器,最终导致软AP配网失败。
问题分析:该问题有可能是wifi驱动中默认开启了power save机制导致
修改方法:修改驱动根目录下的Makefile,将CONFIG_POWER_SAVING = y改为 n,关闭该功能。
问题验证:除使用手机连接配网进行验证,还可以通过抓包,查看beacon帧如下字段查看修改是否生效;
802.11 Management Beacon中
Traffic Indication Map -> Bitmap Control (Traffic Ind)
2.驱动优化处理
- 驱动裁剪
a. 日志裁剪
(根目录Makefile中CONFIG_RTW_DEBUG = y设置为n,或通过CONFIG_RTW_LOG_LEVEL调整日志等级)
b.功能裁剪
CONFIG_P2P = y
android相关文件不编译,CONFIG_RTW_ANDROID设置为0 - 功能优化
a.设备出流能力
(1)修改rtw_rts_thresh 这个根据实际使用场景来修改。(个人这边修改为512)
(2) rtw_preamble,这个也是根据自己需求进行修改。默认是long GI, 如果环境比较干净可以修改为short GI 以提升吞吐
总结
未完待续 – 上班搬砖
这篇关于realtek wifi驱动常见问题-可优化调整点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!