在今天分享一篇关于 wifi 驱动的文章,希望对正在做 wifi 驱动的同学有帮助。
1 简介
wifi 是什么?能用来做什么?
都 2021 年了,相信您对 wifi 一定不陌生了。
可以参考这里的百度百科释义:
wi-fi,在中文里又称作“行动热点”,是wi-fi联盟制造商的商标做为产品的品牌认证,是一个创建于ieee 802.11标准的无线局域网技术。基于两套系统的密切相关,也常有人把wi-fi当做ieee 802.11标准的同义术语。
那 wifi 能用来干什么呢?
以手机为例,很明显有两个功能:
开启 wifi ,连接到路由器;
开启热点(ap),让别人连接到由自己设备 wifi 开出来的路由;
这两个场景,在实际中已经很常见了。
本次 wifi 驱动移植,应用场景是什么呢?
简单的说,就是我有一块控制板,现在需要增加 wifi 模块,让设备可以通过 wifi ,正常连接到网络。
应用场景也有很多,比如这些:
对安装环境要求较高的地方(尽可能少的接线);
不易连接有线网络的地方;
低成本,不想用 4g 的地方;
仅用作局域网通信;
...
说到这里,还有一个比较重要的场景,就是设备端作为一个 web 服务器,可以接入其他设备,比如手机 app 等,进行功能参数的配置。这块考虑后边单独写一篇文章总结。
设备怎么与 wifi 模块通信?有哪几种方式?
目前主流的方案有两种:usb 和 sdio ;
不过由于 usb 方案,适配相对简单,因此选用 usb 方式的芯片。
生活中常见的 usb 无线网卡,类似的也是这种方式。
备注:具体使用哪种接口,还要结合实际情况选择。
关于 usb 方式和 sdio 方式,可以看看这份参考资料,wifi的usb和sdio接口是什么??
硬件怎么连接?是否需要天线?如果不需要天线有什么问题?天线不适配又有什么问题?
使用 usb 方式的 wifi 模组,硬件接线较为方便,如下图所示
截图源自创凌官网
由上图可以看到,引脚功能如下:
d+:usb接口+
d-:usb接口-
ant:天线接口
而且整体尺寸很小,图中尺寸单位为毫米(mm)。
下一个问题,肯定是需要天线的,否则 wifi 无法发射出来信号。现象就是:ap 模式下,搜索不到路由。
如果天线不适配,则不能达到最大利用率。实际现象:wifi 网速慢,网络连接不稳定,ping 丢包等。
2 整体流程
这一部分,就回顾一下,从拿到 wifi 模块,到最后产品交付的全流程,然后复盘总结一下。
我把整个过程大致分为三个阶段
其实在这之前,还应该有一个硬件环境准备阶段。
2.1 基础移植
此阶段的终极目的:使系统检测到 wifi 网卡。为什么呢?
usb wifi 的基本操作,都是通过命令行实现,因此必须要先检测到 wifi 网卡,才能针对此网卡,进行特定操作。
本质与操作有线网卡 eth0 类似。
这里首先要做的就是驱动移植,将官方的驱动,移植到现有内核中,这样才能在内核菜单中看到对应模块。
接着需要修改内核选项,使能所用的 wifi 模块。
可以参考文章「详细记录丨realtek rtl8188fu wifi 驱动移植」
最后肯定是要编译,生成新的内核文件,可以使用挂载内核的方式,验证一下新编译的文件是否正常运行。
如果可以看到 wifi 网卡驱动,则表示内核编译无误;否则,需要重复上述步骤,进行检查;
ps:一定要确保硬件连线无误,没有断路、短路、接反等问题。
2.2 命令交叉编译
经过上个阶段,我们已经可以正常检测到网卡了。
这个阶段,主要是准备一些工具,也就是一些用来操作 wifi 的命令、依赖的库文件等;
这个阶段可以参考文章:「详细记录丨realtek rtl8188fu wifi 命令编译」
最后记得把编译生成的命令,放到文件系统中的对应路径。
注意命令权限,正常应该是 755 ,一定要有可执行权限!!!
当我们准备好所需命令后,就可以编写一些自动化的脚本,这样在程序中,只需调用对应脚本文件即可。
当然了,一些特殊文件,比如保存 wifi 名称密码的文件,由于需要经常修改,因此还需要在程序中进行写文件操作。
我的做法是先在文件系统中,给一个默认的初始文件,当参数有改变时,重新再写一次文件。
其实也可以单独修改文件中的某一部分,但是经过评估,发现数据量不大,直接擦了重写,更加简单方便!
2.3 业务开发
第一个应用场景:连接路由
即需要控制 wifi 模块,连接到特定的路由,进行网络通信、数据交互等。
此时可以参考文章:「详细记录丨realtek rtl8188fu wifi 连接路由」
第二个应用场景:开启 ap 热点
也就是设备本身,需要发射出来信号,以供其他设备连接。
此时可以参考文章:「详细记录丨realtek rtl8188fu wifi 开启热点」
其实还有另外一个应用场景:web服务器,不过我想后边单独出一篇文章来写。
是什么呢?简单说就是一个 http server ,这个 server 可以处理 post 请求,进而实现与其他移动端设备的数据交互。
结合本项目,是用于 app 给设备配置功能参数。
3 问题汇总
由于自己在做这一块的时候,遇到太多坑了,因此觉得很有必要再总结一下,希望能帮到您~
wifi 配置为 ap 模式需要做什么?注意什么?
wifi 开启 ap 模式,说白了,就两点要求:找得到,连得上;
找得到:我们总得能看到这个 wifi 热点吧?
连得上:我们即使看到了,也得能正常连上去吧?
这里进一步延伸,就有两个技术点
必须要选择合适的天线,否则信号较难发射出来,又或者信号不好;
服务端需要有 dhcp 功能,确保设备可以正常连接,正常获取到 ip 地址;
其实脚本文件中的这一步,就是自动分配 ip 地址的过程。
如果没有开启 dhcp 功能,有什么异常?
我实际遇到的异常是:手机打开 wifi 开关,点击连接 wifi ,发现一直处于获取 ip 地址的过程中,始终无法连接上去,后经查找资料,才发现还需要服务端自动分配 ip 地址。
wifi 开启 ap 模式,信道选择有什么注意的?
关于这个问题,强烈推荐这篇教程 为什么wifi自动信道选到的信道多数在1/6/11(https://blog.csdn.net/linuxjourney/article/details/39828553)
经过实际测试,发现修改为信道 11 ,效果要好一点。当然,这个还是要结合实际情况来定
具体表现就是:可以更快的找到 wifi 热点,连接也比较稳定。
ps:自我感觉了解的不是很充分,如果您有不同见解,欢迎留言指出,十分感谢!比心
如果信道选择的不对,造成的问题,具体表现有这几种
wifi 信号强度不好;
wifi 信号稳定性不好;
找到 wifi 路由,需要的时间较久;
wifi 模块天线选择问题
这个问题,极其重要。
刚开始拿到样品后,我们使用现有的其他天线,有好几种不同的,发现测试结果总是不尽人意。
一个 8m 的文件,传输过程需要好几分钟;实际测到的速度,也就几十 kb ,用起来也很糟心。
后来我们的硬件工程师,单独把我们的样机,送到天线厂商那做了适配,回来后,发现效果还真是不错。
因此,一款合适的天线,还是极其重要的!!!
wifi 模块相关问题,是否跟驱动有关系?
这个问题,我目前还没有测试。
但是之前把问题反馈给供应商的时候,他们是给了一个新的 wifi 驱动程序,让再测试一下。
因此,自我感觉,还是有一定影响的。
天线安装位置问题
由于我们的设备,是集成在一个很小的外壳里边,而且有大部分面积,都是金属材料。
然后设备还有 4g 、wifi 、两个蓝牙模块,这些无线模块之间,信号频段又会互相造成干扰。
因此安装位置一定要找好,多考虑考虑。
4 总结
第一次做这样的总结复盘,如有不适之处,烦请提出您的宝贵意见,谢谢您!
原文标题:我对 wifi 驱动移植过程,做了一次总结复盘
文章出处:【微信公众号:strongerhuang】欢迎添加关注!文章转载请注明出处。
极米Z6无屏电视评测 横扫3000元以下投影设备
LDMOS和VDMOS
燃烧箱灼热丝、针焰、漏电起痕、水平垂直四大阻燃箱
基于3D ToF传感器的DMS,增强头部和视线追踪的可靠性
NVIDIA GPU计算的关键技术解析
WiFi驱动移植过程命令交叉编译
lm311引脚及功能
Allegro电机驱动器芯片出货量迎来突破
京雄城际铁路今天正式全线开通:时速 350 公里,全程 50 分钟
4-20mA电流环路发送器入门
华为助力瑞士运营商Sunrise推出了瑞士首批5G智能终端
电源管理芯片供应商价格合理因素
英特尔如何助力京东进行智能零售的创新
小动物下肢运动机能实验系统
浅谈英国ARM公司的IP授权模式
骨传导蓝牙耳机哪款性价比高、骨传导蓝牙耳机排行榜
工业互联网系列访谈 | 中国移动肖青:主动标识载体赋能万物互联,引领工业数字化转型
智慧地下停车场车位占用监测模块钡铼BL200
DIC Forum 2020中国(上海)国际显示产业高峰论坛在上海隆重举行!
Oculus于GDC 2019大会期间正式发布了Oculus Rift新版本