图文讲解 WiFi 驱动移植过程,很肝~
📅 2023-08-04
👍 0 赞
本篇文章打算对WiFi 驱动移植文章进行一次系统性的总结、复盘,分享一下自己的思考过程,遇到的问题等。 备注:由于自己目前仅使用了一款 WiFi ,因此不能代表所有的 WiFi 种类,仅以此为代表,谈谈自己的理解与思考。如有问题,欢迎一块讨论交流。可关注微信公众号「嵌入式基础学习 」,通过公众号后台,加我微信好友,一起学习! 1 简介 都 2021 年了,相信您对 WiFi 一定不陌生了。 可以参考这里的百度百科释义:【百度百科 - WiFi(https://baike.baidu.com/item/Wi-Fi/151036?fromtitle=WIFI&fromid=803834&fr=aladdin)】 开启热点(AP),让别人连接到由自己设备 WiFi 开出来的路由; 简单的说,就是我有一块控制板,现在需要增加 WiFi 模块,让设备可以通过 WiFi ,正常连接到网络。 说到这里,还有一个比较重要的场景,就是设备端作为一个 Web 服务器,可以接入其他设备,比如手机 APP 等,进行功能参数的配置。这块考虑后边单独写一篇文章总结。 不过由于 USB 方案,适配相对简单,因此选用 USB 方式的芯片。 生活中常见的 USB 无线网卡,类似的也是这种方式。 关于 USB 方式和 SDIO 方式,可以看看这份参考资料,WIFI的USB和SDIO接口是什么??(https://zhidao.baidu.com/question/117152584.html) 硬件怎么连接?是否需要天线?如果不需要天线有什么问题?天线不适配又有什么问题? 使用 USB 方式的 WiFi 模组,硬件接线较为方便,如下图所示 截图源自创凌官网 下一个问题,肯定是需要天线的,否则 WiFi 无法发射出来信号。现象就是:AP 模式下,搜索不到路由。 如果天线不适配,则不能达到最大利用率。实际现象:WiFi 网速慢,网络连接不稳定,ping 丢包等。 2 整体流程 这一部分,就回顾一下,从拿到 WiFi 模块,到最后产品交付的全流程,然后复盘总结一下。 其实在这之前,还应该有一个硬件环境准备阶段。为了尽量详细,简要描述如下: 2.1 基础移植 此阶段的终极目的:使系统检测到 WiFi 网卡 。为什么呢? USB WiFi 的基本操作,都是通过 命令行 实现,因此必须要先检测到 WiFi 网卡,才能针对此网卡,进行特定操作。 这里首先要做的就是 驱动移植 ,将官方的驱动,移植到现有内核中,这样才能在内核菜单中看到对应模块。 接着需要修改内核选项,使能所用的 WiFi 模块。 最后肯定是要编译,生成新的内核文件,可以使用挂载内核的方式,验证一下新编译的文件是否正常运行。 如果可以看到 WiFi 网卡驱动,则表示内核编译无误;否则,需要重复上述步骤,进行检查; PS:一定要确保硬件连线无误,没有断路、短路、接反等问题。 2.2 命令交叉编译 这个阶段,主要是准备一些 工具 ,也就是一些用来操作 WiFi 的命令、依赖的库文件等; 最后记得把编译生成的命令,放到文件系统中的对应路径。 注意命令权限,正常应该是 755 ,一定要有可执行权限!!! 当我们准备好所需命令后,就可以编写一些自动化的脚本,这样在程序中,只需调用对应脚本文件即可。 当然了,一些特殊文件,比如保存 WiFi 名称密码的文件,由于需要经常修改,因此还需要在程序中进行写文件操作。 我的做法是先在文件系统中,给一个默认的初始文件,当参数有改变时,重新再写一次文件。 其实也可以单独修改文件中的某一部分,但是经过评估,发现数据量不大,直接擦了重写,更加简单方便! 2.3 业务开发 即需要控制 WiFi 模块,连接到特定的路由,进行网络通信、数据交互等。 也就是设备本身,需要发射出来信号,以供其他设备连接。 其实还有另外一个应用场景:Web服务器 ,不过我想后边单独出一篇文章来写。 是什么呢?简单说就是一个 HTTP Server ,这个 Server 可以处理 POST 请求,进而实现与其他移动端设备的数据交互。 3 问题汇总 由于自己在做这一块的时候,遇到太多坑了,因此觉得很有必要再总结一下,希望能帮到您~ WiFi 配置为 AP 模式需要做什么?注意什么? WiFi 开启 AP 模式,说白了,就两点要求:找得到,连得上 ; 必须要选择合适的天线,否则信号较难发射出来,又或者信号不好; 服务端需要有 DHCP 功能,确保设备可以正常连接,正常获取到 IP 地址; 其实脚本文件中的这一步,就是自动分配 IP 地址的过程。 我实际遇到的异常是:手机打开 WiFi 开关,点击连接 WiFi ,发现一直处于 获取 IP 地址的过程中 ,始终无法连接上去,后经查找资料,才发现还需要服务端自动分配 IP 地址。 WiFi 开启 AP 模式,信道选择有什么注意的? 关于这个问题,强烈推荐这篇教程 为什么WiFi自动信道选到的信道多数在1/6/11(https://blog.csdn.net/linuxjourney/article/details/39828553) 经过实际测试,发现修改为信道 11 ,效果要好一点。当然,这个还是要结合实际情况来定???? 具体表现就是:可以更快的找到 WiFi 热点,连接也比较稳定。 PS:自我感觉了解的不是很充分,如果您有不同见解,欢迎留言指出,十分感谢!比心???????????? 刚开始拿到样品后,我们使用现有的其他天线,有好几种不同的,发现测试结果总是不尽人意。 一个 8M 的文件,传输过程需要好几分钟;实际测到的速度,也就几十 kb ,用起来也很糟心。 后来我们的硬件工程师,单独把我们的样机,送到天线厂商那做了适配,回来后,发现效果还真是不错。 但是之前把问题反馈给供应商的时候,他们是给了一个新的 WiFi 驱动程序,让再测试一下。 由于我们的设备,是集成在一个很小的外壳里边,而且有大部分面积,都是金属材料。 然后设备还有 4G 、WiFi 、两个蓝牙模块,这些无线模块之间,信号频段又会互相造成干扰。 4 总结 第一次做这样的总结复盘,如有不适之处,烦请提出您的宝贵意见,谢谢您! 我一直相信「 兼听则明,偏听则暗 」,所以有问题请一定记得给我留言哈~ 然后这篇文章,也算断断续续写了两周时间,期间在忙工作、也在忙一些其他的事情。经过这几天的加班加点,总算赶出来了。 我是一个积极乐观????????????的程序开发者,您可以叫我一声 小二 ,亦或者,叫我一声 Boom ,都行,随您开心。 ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ 关注下面 微信公众号,通过公众号后台,加作者微信好友,一起学习!
🔓 解锁阅读全文
📤 分享到社交平台
💬 微信
📢 微博
💬 QQ
👥 QQ空间
🔗 复制链接