内核配置
修改后的配置文件我们放在目录:~/share/patchs/wifi-config-dts
和原生配置文件比较,差异点如下:
CONFIG_RTL8189FS=y
指定WiFi主控芯片型号:RTL8189FS。
CONFIG_MWIFIEX=y
外接WiFi设备(类似USB网卡)。
CONFIG_MWIFIEX_SDIO=y
外接WiFi设备SDIO接口支持。
我们需要把改动的代码合并过去~
内核设备树
kernel/arch/arm64/boot/dts/rockchip/rk3308-evb-v10.dtsi
上图是wifi驱动的节点:wireless-wlan,默认已经是打开了(okay),但是型号ap6255和我们板载的芯片是不一致的,板载型号:rtl8189fs,直接把ap6255改成rtl8189fs即可;或者可以进行补丁,补丁前提是没有打上一章SD卡的补丁,不然会出错:
实际上这个补丁也包含了SDcard的补丁;然后编译烧录内核到开发板上。
wpa_supplicant
什么是wpa_supplicant?
wpa_supplicant是一个开源项目,已经被移植到Linux,是一个连接、配置WIFI的工具,经过编译后 的 wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant 和wpa_cli,wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用 wpa_cli来搜索、设置、和连接网络。
WiFi的STA模式是什么?
STA(Station)模式也称站点模式,每一个连接到无线网络(WiFi)的终端(如笔记本电脑、手机等)都可称为一个站点;我们的板子去连接路由器的WiFi,就是工作在STA模式下的功能。
应用测试
首先我们需要确认无线网卡(wlan)已经起来,通过命令:ifconfig
上图中的wlan0就是无线网卡。
首先我们将wpa_supplicant运行起来,命令如下:
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B
说明:-D是指定驱动名称,-i是指定网卡的名称,-c是指定配置文件的路径,-B是后台运行。
运行起来后就可以通过wpa_cli status去交互了,如图是查看状态:wpa_cli status
我们可以扫描附近的WiFi:wpa_cli -I wlan0 scan
查看扫描结果:wpa_cli -i wlan0 scan_result
接着我们连接一个网络:wpa_cli -i wlan0 add_network
针对要添加的网络号设置wifi名称和密码:
wpa_cli -i wlan0 set_network 0 ssid '"CMCC-6F49"'
wpa_cli -i wlan0 set_network 0 psk '"6F4910!@"'
最后使能网络:
wpa_cli -i wlan0 enable_network 0
通过wpa_cli status查看状态,显示的ASSOCIATED是WiFi连接交换密钥阶段:
过一会再查看状态:
bssid是路由器的mac地址,wpa_state为COMPLETED表示已经成功连接上路由器的wifi了。
查看网络的连接质量:cat /proc/net/wireless
信号质量的单位是dBm数值进行表示的,图中的level就是信号强度,-50dBm~0表示网络非常好,-90dBm~-50dBm表示网络正常,显然-69还是不错的。
信号查记得检查是否有连接天线:
配置文件连接
如果我们已经知道了wifi的名称和密码并存储在文件中,实际上可以在启动wpa_supplicant的时候就去连接的。
首先我们把wpa_supplicant这个程序kill掉,同时把无线网卡重新启动下,命令如下:
退出进程:killall wpa_supplicant
关闭无线网卡:ifconfig wlan0 down
开启无线网卡:ifconfig wlan0 up
然后在内存中建立一个配置文件,内容如下:
network={
ssid="CMCC-6F49"
psk="6F4910!@"
key_mgmt=WPA-PSK
}
然后重启wpa_supplicant,但是选项中带上这个配置文件:
wpa_supplicant -iwlan0 -c/tmp/wifi.conf &
这里&也可以用-B,区别是-B(守护进程)没有日志可以查看,上述命令运行效果:
连接wifi成功,ifconfig可以查看wlan0已经获取到ip地址。