登录

Open Harmony OS wifi驱动调试总结

5.0共1课时3.3万人已学习

分享
免费
24小时内答疑 专属资料下载

Open Harmony OS wifi驱动调试总结课程介绍


1.   目标

学会调用wpa supplicant接口命令,来测试HarmonyOS WiFi驱动是否安装成功。安装成功的表现是开发板上的WiFi模组可以工作在STA状态,也可以工作在AP状态。

工作在STA状态时,开发板要能够连接上指定的热点(一般用手机做热点测试);工作在AP状态时,手机要能够连接上开发板网卡生成的热点。

理解wpa_supplicant的开发框架,以便生产网卡的厂家进行HarmonyOS系统驱动的适配。

2.   把开源代码中提供的例程加入系统

代码中提供了验证wifi基本功能的示例代码,默认未参与编译,修改`applications/sample/camera/communication/BUILD.gn`,添加如下所示的feature

lite_component("sample") {

    features = [

        "wpa_supplicant:wpa_sample", #station模式的示例

        "hostapd:hostapd_sample", #ap模式的示例

        "wpa_cli:wpa_cli_sample" #使用client监听事件和控制wpa的示例

    ]

}

"wpa_supplicant:wpa_sample"station模式的示例,"hostapd:hostapd_sample"ap模式的示例,"wpa_cli:wpa_cli_sample" 是使用client监听事件和控制wpa的示例。这样,系统编译时就会生成我们需要的可执行程序以及把相应的配置文件添加到/etc目录里面去。

3.   系统启动及端口复用设置

3.1.  文件烧录部分,本文不再赘述

3.2.  系统启动项设置

上电复位后,进入uboot界面,输入如下uboot命令:

1.         setenv bootcmd 'sf probe 0;sf read 0x80000000 0x100000 0x600000;mw 0x112F0008 0x601;mw 0x112F000C 0x501;mw 0x112F0010 0x501;mw 0x112F0014 0x501;mw 0x112F0018 0x501;mw 0x112F001C 0x501;go 0x80000000';saveenv;

2.         setenv bootargs "ttyAMA0,115200n8 root=flash fstype=jffs2 rw rootaddr=7M rootsize=8M";saveenv;

 

关于这两条命令的含义,我们已经在sample_test的例程中详细讲过,请大家往前翻看下。对于不同的开发板,不同大小的应用程序,上述两行命令行中的参数会有所不同。我们着重讲一下,前面没有遇到过的部分:wifi模组端口引脚复用设置。这块由以下几条命令组成:mw 0x112F0008 0x601;mw 0x112F000C 0x501;mw 0x112F0010 0x501;mw 0x112F0014 0x501;mw 0x112F0018 0x501;mw 0x112F001C 0x501以“mw 0x112F0008 0x601”为例,它的作用就是修改寄存器Pin SDIO1_CCMD IO Config Register iocfg_reg68的值,将功能选择为SDIO1_CCMD,系统默认的是GPIO6_1。其余的命令可以依样查找相关产品文档进行确认。

image.png

 

4.   检查网卡驱动加载是否成功

程序烧录成功后,上电重新启动。进入Harmony系统后,第一件事要查看网卡驱动是否初始化成功。检查是否初始化成功的方法是在HarmonyOS中运行命令ifconfignetwork interface configuring),如果出现无线网卡,那么就说明驱动加载成功了。在Harmony系统中,无线网卡被统一命名为wlan0.

image.png

如果没有发现wlan0,可以重新插拔下无线网卡,看看接口是不是固定牢固了。

5.   STA模式运行结果

HarmonyOS中,cd bin,然后输入命令:“./wpa_supplicant –i wlan0 –c  ../etc/wpa_supplicant.conf”。为了便于理解命令的一些关键词,这里贴几张图,简单展示下Harmony系统的目录:

a)         bin目录

image.png


b)        根目录

image.png


c)         etc目录

image.png


 

下面解释下这个命令:wpa_sufficant是二进制的可执行程序,它两个参数。第一个参数表示的是WiFi连接使用的是无线网卡wlan0,第二个参数是将要连接的热点的信息。本案例中,该热点信息配置如下:

image.png



命令运行成功后,利用手机(我们测试用的是android手机)创建ssidexample,密码是“12345678”的热点。等待一会,你会发现连接手机热点的终端个数从0变成了1

image.png


6.   AP模式运行结果:

HarmonyOSbin命令里面,执行命令:hostapd -i wlan0 /etc/hostapd.confhostapd.conf的配置如下:

image.png


运行命令后,打开手机,搜索热点。手机会找到testap热点,输入密码“12345678”后,就可以连上了。下图中红色区域是板子在等待连接,绿色区域表示已经连接成功。

image.png



7.   Wpa_cli客户端运行结果

开源出来的程序可能有点问题(编译条件非常严格的时候出现),编译的时候有两个bug,修改后编译通过。

7.1.  int_t改成size_t(形参类型不匹配)

image.png


7.2.  pad变量注释掉(这两个变量被定义了,却没有使用)

image.png


7.3.  先运行sta demo

bin目录下,输入命令“./wpa_supplicant –i wlan0 –c  ../etc/wpa_supplicant.conf”,手机热点“example”暂时不要开。

7.4.  运行wpa_cli客户端,不开手机热点

bin目录下,输入命令“./wpa_cli”这个时候后台会wpa_cli会提示收到没有连接到热点的消息:

image.png

7.5.  打开手机热点,让开发板连接上

这个时候wpa_cli给出的消息如下,说明开发板已经连接上手机热点。这个和手机热点端给出的提示信息一致:连接手机热点的终端从0变成了1.

image.png

本文仅作为Harmony系统wifi部分的使用参考案例,对第三方开源软件wpa_supplicant没有做深入了解。

8.   WIFI驱动程序的HDF框架解析

Wifi驱动的实现极好地展现了Harmony系统HDF的通信机制,下面我们略作讲解。

8.1.  用户端调用

本示例中的wpa_supplicant hostapd两个用户态的可执行程序,最后都是通过调用内核态的Dispatch函数来执行指令。cmdid不同,内核态就执行不同的函数。

image.png

Harmony系统根据wifi协议,把相关功能的实现总结成如下的几个函数。通过这几个函数,已经足够可以实现系统需要达到的能力。

 

image.png

8.2.  内核态的实现

在系统启动,驱动初始化的过程中,wifi设备节点绑定的Dispatch函数其实就是WifiCmdProcess,而WifiCmdProcess的具体实现是靠g_wifiCmdHandle这个函数数组来实现的。这个函数数组里面包含了一系列函数,具体调用哪个函数(或者说取数组中的那个值),完全取决于用户态的调用(传递过来cmd编号)。   

 

image.png

image.png

image.png

 


文件hdf_wifi_cmd.c中(*WifiCmdHandle)里面的执行函数,最后是通过调用海思芯片3881驱动中具体的函数来实现,hi3881的驱动文件目录如下图所示。

image.png



9.   源码

本文档介绍的案例的源码,在系统中已有提供,目录如下,请大家自助获取:

image.png



注:本文档或视频中所有的图片,代码截图仅供参考,具体以HarmonyOS官网发布的最新内容为准。

Open Harmony OS wifi驱动调试总结课程目录 1个课时 

Open Harmony OS wifi驱动调试总结讲师介绍

张飞

张飞实战电子专家

238540学员

张飞老师,专家级工程师、张飞电子创始人,2005年起从事电子研发,在上海某研究所学习近一年。2008年至今在大型外资企业担任首席工程师、专家,研发企业未来3至5年的产品。还担任过课长、经理等职务。视频教程将自己这十多年从事一线研发的经验和心得与大家分享,带领大家一起学习如何设计和优化电路。

Open Harmony OS wifi驱动调试总结推荐相关课程

课程评分  (0) 满意度评分
选择优惠券
×
20
完善资料,
赚取积分
×