按照周立功的指导手册进行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"
}
周立功为了系统安全,将/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
能搜到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]#
如何实现开机自动连上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