0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

WiFi驱动移植过程命令交叉编译

strongerHuang 来源:嵌入式基础学习 作者:嵌入式基础学习 2021-06-13 15:28 次阅读

在今天分享一篇关于 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 模块通信?有哪几种方式?

目前主流的方案有两种:USBSDIO ;

不过由于 USB 方案,适配相对简单,因此选用 USB 方式的芯片

生活中常见的 USB 无线网卡,类似的也是这种方式。

备注:具体使用哪种接口,还要结合实际情况选择。

关于 USB 方式和 SDIO 方式,可以看看这份参考资料,WIFI的USB和SDIO接口是什么??

硬件怎么连接?是否需要天线?如果不需要天线有什么问题?天线不适配又有什么问题?

使用 USB 方式的 WiFi 模组,硬件接线较为方便,如下图所示

6bc5c7c4-c4b8-11eb-9e57-12bb97331649.png

截图源自创凌官网

由上图可以看到,引脚功能如下:

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】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动
    +关注

    关注

    12

    文章

    1818

    浏览量

    85104
  • WIFI
    +关注

    关注

    81

    文章

    5279

    浏览量

    203052

原文标题:我对 WiFi 驱动移植过程,做了一次总结复盘

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-开发环境搭建之交叉编译

    设置环境变量。设置编译环境主要是指定目标架构和交叉编译工具链,以及编译过程中使用到的一些库的路径等,使用如下
    发表于 09-30 09:36

    飞凌嵌入式ElfBoard ELF 1板卡-开发环境搭建之交叉编译

    设置环境变量。设置编译环境主要是指定目标架构和交叉编译工具链,以及编译过程中使用到的一些库的路径等,使用如下
    发表于 09-29 09:51

    第四章:在 PC 交叉编译 aarch64 的 tensorflow 开发环境并测试

    本文介绍了在 PC 端交叉编译 aarch64 平台的 tensorflow 库而非 tensorflow lite 的心酸过程
    的头像 发表于 08-25 11:38 716次阅读
    第四章:在 PC <b class='flag-5'>交叉</b><b class='flag-5'>编译</b> aarch64 的 tensorflow 开发环境并测试

    如何增加驱动AT命令

    如何网络编译增加:驱动 AT 命令,谢谢! 本地编译需要搭建开发环境,暂时还没搭建成功,请问各位如何网络编译增加:
    发表于 07-19 08:17

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-交叉编译链描述及使用方法

    环境变量,编译.c文件时直接使用$CC命令即可。注意:交叉移植其它应用时,需要注意Makefile文件中CC、CXX的定义,如果与设置环境变量的脚本中设置的不一致,需要进行删除或修改。
    发表于 05-20 16:55

    飞凌嵌入式ElfBoard ELF 1板卡-交叉编译链描述及使用方法

    环境变量,编译.c文件时直接使用$CC命令即可。注意:交叉移植其它应用时,需要注意Makefile文件中CC、CXX的定义,如果与设置环境变量的脚本中设置的不一致,需要进行删除或修改。
    发表于 05-20 16:53

    OpenHarmony 移植:build lite 编译构建过程

    这些疑惑,会对 build lite 编译构建过程有个更深入的理解。 1、产品解决方案代码是如何被调用编译的 在文件 buildliteBUILD.gn 配置文件中的构建目标 //build/lite
    的头像 发表于 02-19 16:19 876次阅读

    QT开发学习笔记1(安装交叉编译器)

    QT安装交叉编译
    的头像 发表于 02-18 10:02 831次阅读
    QT开发学习笔记1(安装<b class='flag-5'>交叉</b><b class='flag-5'>编译</b>器)

    【米尔-TIAM62开发板-接替335x-试用评测】OPENCV和NCNN交叉编译

    目录 1. 前言 2. OPENCV交叉编译 3. NCNN交叉编译 4. OPENCV和NCNN移植 1. 前言 介绍了OpenCV和NC
    发表于 12-16 23:16

    飞凌OK113i-C全志T113-i开发板rtl8723du WIFI功能测试及蓝牙驱动移植

    飞凌 OK113i-C 全志T113-i开发板板载一个RTL8723du wifi/蓝牙二合一模块,板子出厂已经移植好了WIFI驱动但是蓝牙驱动
    的头像 发表于 12-11 13:52 2209次阅读

    【飞腾派4G版免费试用】1.实战交叉编译环境搭建和手把手uboot编译

    命令: ro@pc:~/work/u-boot-v1.40-pi$ cat ./set_env.sh 哈哈,看到这些代码了吗?它们的作用是为了配置交叉编译环境。其中,export PATH这行
    发表于 12-06 16:58

    【ELF 1开发板试用】+ 5.0 Wireless_Tools WIFI工具移植

    :ELF1 开发环境:window10+VMware+ubuntu 18.04 交叉编译环境:arm-linux-gnueabihf-gcc Wireless移植 1.下载源码: wget https
    发表于 12-06 16:35

    uboot命令的执行过程是什么

    u-boot命令的执行过程。 1、u-boot命令的执行过程 在u-boot命令执行到最后时,开始进入
    的头像 发表于 12-04 17:31 726次阅读

    嵌入式开发中的交叉编译详解

    在嵌入式开发中,经常会遇到目标平台资源贫乏,无法运行需要的编译器。亦或是目标平台上不允许或不能够安装需要的编译器。这时候就需要使用交叉编译了。
    的头像 发表于 12-01 13:24 1102次阅读
    嵌入式开发中的<b class='flag-5'>交叉</b><b class='flag-5'>编译</b>详解

    C程序的完整编译过程

    本文讨论了C程序的完整编译过程,分别讲述了预处理、编译、汇编、链接各阶段完成的编译任务。然后通过一个编译实例,探讨了各阶段输出的文件。
    的头像 发表于 11-15 17:14 2779次阅读
    C程序的完整<b class='flag-5'>编译</b><b class='flag-5'>过程</b>