调试记录-wifi模块驱动

按照周立功的指导手册进行wifi驱动移植,将生产的两个驱动模块放到核心板的/opt目录下

drivers/net/wireless/brcm80211/brcmutil/brcmutil.ko
drivers/net/wireless/brcm80211/brcmfmac/brcmfmac.ko

同时,新增文件insert_wifi.sh,内容如下:

#/bin/sh
insmod /opt/brcmutil.ko && #加载 brcmutil.ko 完成,才执行下一行命令,加载 brcmfmac.ko
insmod /opt/brcmfmac.ko
sleep 2
ifconfig wlan0 up

编辑 WiFi 配置文件/etc/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
	ssid="QZYN-300M"
	psk="123456789"
}

问题1:只读文件系统

周立功为了系统安全,将/etc设置为只读文件系统,修改需要在前面加wr,即使用这个命令来打开文件并修改

wr vi /etc/wpa_supplicant.conf

执行如下命令,连接/etc/wpa_supplicant.conf 配置文件中描述的 WiFi 热点.

wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -B 

周立功原来的指导手册是使用这个命令,多出来的> /dev/null 2>&1,主要意思是产生的错误报警不报告到终端,直接丢弃掉,这样不利于调试,调试的时候可以先不加。我在调试的时候,配置文件/etc/wpa_supplicant.conf里的psk,被我误写成了key_mgmt,一直也没有错误记录爆出来,但就是连不上wifi,耽误了不少时间。

wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -B > /dev/null 2>&1

经过以上操作以后,会出现一个报错,但是这个错误不会影响wifi连接。我在调试的时候,一直没连上wifi,以为是这个错误导致的,实际上是由于wifi信号不好,这里也耽误了不少时间。
在这里插入图片描述
也就是说,rfkill这个错误,可以忽略。

rfkill: Cannot open RFKILL control device

问题2:WIFI连接不上

能搜到wifi,就是连接不上,状态如下:

root@IoT-A6G2C opt]# wpa_cli -iwlan0 status
wpa_state=SCANNING
address=28:ed:e0:f8:c5:49
uuid=e806d8f8-f685-5316-9f52-924ab8f92c50

可能是由于wifi的信号质量不好。信号质量-81属于信号不太好的状态。

34:46:ec:55:13:98       2437    -81     [WPA2-PSK-CCMP][WPS][ESS]       QZYN-300M

手头暂时确实天线,就把核心板拿到路由器边上,就可以连接上了。

root@IoT-A6G2C opt]# wpa_cli -iwlan0 status
bssid=34:46:ec:55:13:98
freq=2437
ssid=QZYN-300M
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
address=28:ed:e0:f8:c5:49
uuid=e806d8f8-f685-5316-9f52-924ab8f92c50
[root@IoT-A6G2C opt]# udhcpc -i wlan0
udhcpc (v1.23.2) started
Sending discover...
Sending select for 192.168.3.8...
Lease of 192.168.3.8 obtained, lease time 86400
deleting routers
adding dns 192.168.3.1
[root@IoT-A6G2C opt]#

问题3:开机自动启动

如何实现开机自动连上wifi,需要修改开机启动脚本/etc/init.d/S90start_userapp.sh,增加内容如下:

#enable wifi
cd /opt
./insert-wifi.sh
sleep 6
wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -B
sleep 3
udhcpc -i wlan0

开机以后,自动执行的结果如下:

brcmfmac: brcmf_c_preinit_dcmds: Firmware version = wl0: Apr 22 2013 14:50:00 version 5.90.195.89.6 FWID 01-b30a427d
brcmfmac: brcmf_cfg80211_reg_notifier: not a ISO3166 code
fec 20b4000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Successfully initialized wpa_supplicant
rfkill: Cannot open RFKILL control device
udhcpc (v1.23.2) started
Sending discover...
Sending select for 192.168.43.93...
Lease of 192.168.43.93 obtained, lease time 3600
deleting routers
adding dns 192.168.43.1
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EMW3161嵌入式WIFI模块介绍: EMW3161是一种基于MX1081的超小型,超低功耗的嵌入式Wi-Fi模块。MX1081是一款超高集成度的Wi-Fi微控制器,集成了IEEE 802.11 MAC,基带,射频以及一个可以运行Wi-Fi网络协议栈和应用程序的微控制器核心。EMW3161内置1M字节的闪存,128K字节RAM和丰富的外设。 配合mxchipWNet嵌入式Wi-Fi固件,用户可以方便、快速地为嵌入式设备增加Wi-Fi网络通讯功能, 如,使用mxchipWNet-DTU串口透明传输固件,可以立即为您的串口设备添加无线网络功能。缩短了开发周期,实现快速上市。用户也可以使用mxchipWNet软件库直接在模块上开发各种嵌入式Wi-Fi应用,进一步降低成本和产品体积 。 EMW3161模块硬件配置 ★ 单操作电压:3.3V; ★ 典型应用功耗: -保持无线网络连接仅需约7mA电流 -以20kbps传输数据时(传输周期100ms),平均功耗约24mA -待机功耗约8μA ★ 120MHz主频的STM32F2微控制器内核,内嵌Flash 1M bytes,RAM 128kBytes; ★ 包含如下外设: -42个GPIO口 -1个带硬件流控制的UART接口,2个普通UART接口 -2个SPI接口,1个IIS接口 -8个ADC输入通道,2个DAC输出通道 -1个USB OTG接口, 1个CAN接口 -2个I2C接口 -每个GPIO口都拥有PWM输入,输出和定时器输入输出通道 -DCMI接口 -SWD调试接口 ★ 完整功能的Wi-Fi联通性 -支持IEEE 802.11 b/g/n,Wi-Fi频段1-13 -发射功率:18dBm@11b,15dBm@11g,14.5dBm@11n -接收灵敏度:-96dBm -数据传输率:[email protected], [email protected], [email protected] -WPS 2.0 -加密方式:WEP,WPA/WPA2 PSK/Enterprise -多种节能模式 ★ 板载陶瓷天线,也可以通过IPEX连接外接天线 ★ 每个模块都经过专门RF调校,并通过CE,FCC等国际认证 ★ SWD调试接口 典型应用: ★ 楼宇自动化/门禁、保安控制系统 ★ 智能家电 ★ 医疗和个人保健系统 ★ 移动销售点系统(POS) ★ 汽车电子 EMW3161的领先技术: ★ SOC技术,超小体积 ★ EasyLink一键配置 ★ 超低功耗,保持网络连接仅需7mA ★ 无缝漫游切换 ★ 高速网络传输,实际最高可达20Mbps ★ 内置实时操作系统全新软件系统 附件内容截图:
根据提供的引用内容,ESP8266 WiFi模块驱动程序可以通过以下步骤实现: 1. 首先,需要包含一些文件依赖,如usart.h和usart.c文件,这些文件与USART相关。 2. 其次,还需要包含ESP8266相关的文件,如esp8266_timer.h和esp8266_timer.c文件,以及esp8266.h和esp8266.c文件。 3. 在使用例中,可以通过串口调试助手观察结果。可以使用main.c文件来进行调试。 4. 在调试过程中,可以参考电路图进行连接。电路图中包含了ESP8266 WiFi模块的串口调试过程,以实现通过互联网进行数据远程传输。 5. 在STM32选用核心板F103C8T6的基础上,再加上一个ESP8266 WiFi模块和一个USB-TTL模块用来打印串口数据。 6. 在驱动程序中,可以使用相关的AT指令来控制ESP8266模块的工作,如查询模块是否正常工作、模块复位、恢复出厂设置、设置WiFi模块的模式、设置模块为单路连接模式、连接网络、连接TCP服务器、开启透传模式、开始发送数据等。 7. 可以参考相关的博客来获取更多关于ESP8266 WiFi模块驱动的信息。 请注意,以上是一个简要的概述,具体的驱动程序实现可能需要根据具体的硬件和软件环境进行调整和修改。 #### 引用[.reference_title] - *1* [ESP8266 模块简易驱动程序 -- 基于 STM32F103 及原子云固件实现云功能](https://blog.csdn.net/ArthurCai/article/details/128890203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [STM32之 ESP8266 WIFI 模块驱动代码-可以通过互联网实现数据远程传输(程序稳定,清晰明了非常容易移植到51...](https://blog.csdn.net/qq_34885669/article/details/103886551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【STM32训练—WiFi模块】第一篇、STM32驱动ESP8266WiFi模块获取网络时间](https://blog.csdn.net/Learning1232/article/details/127678792)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值