哈哈,抱歉来晚了。
整理一下Wi-Fi的启动流程:
1.系统启动通过sunxi-rf驱动读取board.dts配置,解析供电,sdio,引脚,时钟等配置。完成上电动作。
2.驱动加载时完成扫卡,下载firmware,add wlan0 interface。
3.系统的自启动脚本在etc/init.d/wpa_supplicant中启动服务,启wlan0。
4.利用wpa_cli/wifimanager进行应用的操作。
上面的错误
建议排查思路:
1.系统起来执行lsmod 查看xradio_mac/xradio_core/xradio_wlan(也有可能是单ko的形式xr829)驱动是否加载成功。
顺便提一下驱动加载失败最常见的错误:
1.供电不匹配。
2.扫卡时失败,sdio配置错误。
3.下载firmware失败。(注意路径:默认是/lib/firmware)
2.执行ps | grep wpa_supplicant查看服务是否启动。
也可以直接执行
./etc/init.d/wpa_supplicant start //再次手动启动
服务启动失败的常见原因:
1.前面驱动加载已经失败了,导致没有wlan0 interface.
2.配置文件不存在比如:wpa_supplicant.conf。默认是在/etc/wifi、目录下
3.文件存在,但是文件系统只读,导致无法对配置文件写操作。
可以手动执行wpa_supplicant命令起服务就可以看到提示如下:
Successfully initialized wpa_supplicant
[ 796.252780] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
mkdir[ctrl_interface=/etc/wifi/sockets]: **Read-only file system**
Failed to initialize control interface '/etc/wifi/sockets'.
You may have another wpa_supplicant process already running or the file was
left by an unclean termination of wpa_supplicant in which case you will need
to manually remove this file before starting wpa_supplicant again.
nl80211: deinit ifname=wlan0 disabled_11b_rates=0
解决办法:
1.直接修改文件系统,换成可读写的,例如ext4.
2.可以自己临时创建配置文件到/tmp目录。