3

全志V3S嵌入式驱动开发(wifi驱动)

 1 year ago
source link: https://blog.csdn.net/feixiaoxing/article/details/131178420
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

全志V3S嵌入式驱动开发(wifi驱动)

嵌入式-老费 已于 2023-06-13 07:39:59 修改 147

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        荔枝派上面除了支持v3s自带的有线网口,还带有一个支持sd协议的esp 8089 wifi模块。有了这个模块,v3s没有网线,也可以用它和外界联系了。但是,我们实际测试下来,效果并不算很理想。这其中最主要的原因,就是网络延迟有点高,哪怕路由器就在测试桌旁,改善也不是很大。当然,我们也看到有人使用了wifi模块RTL8723BS,不知道效果如何。有使用经验的朋友不妨留个言,相互学习下。

        当然,不管esp8089自身质量如何,都不妨碍我们了解一下整个开发过程,比如在Linux下面,一个WiFi设备驱动应该如何加载,测试应该如何进行。

1、原理图

9bf0a9e6d1b546cabd0ee559697148eb.png

         开始今天的讨论之前,我们不妨重新看一下这个wifi电路图。首先最上面是两个晶振的引脚,右上方是26M晶振的输入输出图。右侧是SDC信号,除了clk和cmd之外,就是d0-d3。下方除了一个3v3,其他都是悬空。左侧除了一个ipex天线,剩下来就是一个CHIP_EN,通看全图的话,发现它和PWM0复用同一个信号。

2baab20afe2e48a199928a2992f73e12.png

2、修改dtsi文件

        看完了原理图,下面第一个要准备的就是修改设备树文件。修改的地方都位于同一个文件,即sun8i-v3s-licheepi-zero-with-lcd.dtsi。首先,关闭led,因为和wifi模块有冲突,

        其次,使能mmc1,也就是这个wifi接口,

        有同学如果想要对pin引脚和寄存器、中断了解更多,可以参考文件sun8i-v3s-licheepi-zero.dts中的内容。编译好之后,记得把新的dtb文件拷贝到sd卡上面。

3、准备驱动文件

        目前在linux 4.14.y上面没有看到esp 8089的驱动,所以这部分需要自己去其他地方下载。比如,有一个下载的地址位于github这个地方,即

https://github.com/al177/esp8089

        下载好之后,可以拷贝到ubuntu虚拟机,准备开始编译。编译方法很多,可以选用这种,直接赋值KBUILD和SRC_DIR,

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KBUILD=~/Desktop/linux-zero-4.14.y SRC_DIR=~/Desktop/esp8089-master

        或者含蓄一点,使用-C和M来代替,也是可以的

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make -C ~/Desktop/linux-zero-4.14.y M=${PWD}  modules

        不管哪一种方法,其实都是可以生成esp8089.ko文件的,



newCodeMoreWhite.png

        编译好之后,就可以把es8089.ko拷贝到sd卡的root目录下,等待准备驱动安装了。

4、编译wpa_supplicant

        wpa_supplicant是wifi配置一个非常常见的工具,某种意义上来说,近乎于标配。它对于wifi模块的意义,就和tslib对于触摸屏的意义是一样的。此外,wpa_supplicant又依赖于libnl和openssl这两个库,所以我们需要把这三个文件一起下载下。

        有同学也许会说,为什么不用buildroot去尝试编译wpa_supplicant,省的自己麻烦。主要是我们确实去尝试了,无奈编译出错,所以只好又搭建交叉编译环境来生成wps_supplicant文件了。

        三个文件的链接地址如上所述。首先编译libnl,

        其次,编译openssl,它的configure有一点特殊,主要是os/compiler这个标签,大家注意下,

        准备好了libnl和openssl之后,就可以开始编译wpa_supplicant了。当然,因为它还依赖于libnl和openssl,所以必要的解压和环境准备是少不了的,

        在.config种需要修改这几个变量

        另外,.config中还需要注销DBUS的内容,不然编译有错误,

        最后一步,就是重新设置PKG_CONFIG_PATH,开始编译,

        如果一切顺利,编译结束后,我们就可以看到wpa_supplicant和wpa_cli这两个我们需要的可执行文件了。前面我们把dtb文件拷贝好了,也把驱动esp8089.ko拷贝到root目录下,这里同样也需要把wpa_supplicant和wpa_cli拷贝到root目录下。另外,因为wpa_supplicant依赖libnl的动态库文件,建议把libnl-3.2.23/__install/lib/目录下面的所有文件拷贝到root目录下,这样就省得麻烦了。

5、准备测试

        前面我们已经把esp8089.ko和两个wpa软件、动态库拷贝进来。这个时候还要继续设置一下环境变量,这样wpa_supplicant才使用地起来。

 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root

        首先安装esp8089.ko驱动,这个43就是CHIP_EN引脚,



newCodeMoreWhite.png

        之后,就可以用ifconfig让wlan0上线了,

ifconfig wlan0 up

        wlan0虽然准备好了,但是还没有ssid和密码,这部分需要配置下,即准备/etc/wpa_supplicant.conf这个文件,

        这里psk用的是明文,大家可以根据自己的情况做一个修改。如脚本所示,当然还需要创建一个wpa_supplcant的目录,即,

mkdir -p /var/run/wpa_supplicant

        此外,因为我们测试的时候,有线网口和无线网口来自同一个路由器,为了减少不必要的麻烦,我们先关闭eth0,为测试做准备,

ifconfig eth0 down

        所有这些都做好之后,就可以开始测试wifi了。主要的工作流程也是两步,第一步就是连上wifi,这个工作由wpa_supplicant完成,ssid和密码位于/etc/supplicant.conf文件,

 ./wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &

        第二步就是用ifconfig对wlan0进行ip设置,注意这里就没有使用udhcpc命令了,大家自己测试的时候也可以换成udhcpc,一般都是busybox自带的,

ifconfig wlan0 192.168.0.231 netmask 255.255.255.0 broadcast 192.168.0.1

        使用udhcpc就是这样的,

        如上面脚本所示,ip被设置为了231,这个时候pc地址是100,而且当前开发板和外界唯一的通信就是wifi模块,所以可以看下ping的质量如何,

c8f2b70ef6fa484daf5c6628011ae7fa.png

         测试结果看,延时的起伏还是比较大的。这说明,本身模块的功能,只是解决有无的问题,可以在小范围使用,如果是大规模出货的话,还是要斟酌一下的。

        此外程序运行一段时间,哪怕是ping的时候,也可能崩溃的,这个就有点不爽了。



newCodeMoreWhite.png

        esp8089这个驱动,可能是目前位置我们遇到的、最复杂的驱动。当然,这也没关系。学会了它,要是以后再遇到类似的驱动,相信也不会比它更复杂了,我们也心里更有底了。有兴趣的同学可以好好看下这个过程,争取活学活用,为进一步的开发工作打下基础。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK