内核配置

修改后的配置文件我们放在目录:~/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

路由器主控芯片系统架构 路由器主控板是什么_物联网_02

上图是wifi驱动的节点:wireless-wlan,默认已经是打开了(okay),但是型号ap6255和我们板载的芯片是不一致的,板载型号:rtl8189fs,直接把ap6255改成rtl8189fs即可;或者可以进行补丁,补丁前提是没有打上一章SD卡的补丁,不然会出错:

路由器主控芯片系统架构 路由器主控板是什么_网关_03

实际上这个补丁也包含了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

路由器主控芯片系统架构 路由器主控板是什么_linux_04

上图中的wlan0就是无线网卡。

首先我们将wpa_supplicant运行起来,命令如下:

wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B

说明:-D是指定驱动名称,-i是指定网卡的名称,-c是指定配置文件的路径,-B是后台运行。

路由器主控芯片系统架构 路由器主控板是什么_物联网_05

运行起来后就可以通过wpa_cli status去交互了,如图是查看状态:wpa_cli status

我们可以扫描附近的WiFi:wpa_cli -I wlan0 scan

查看扫描结果:wpa_cli -i wlan0 scan_result

路由器主控芯片系统架构 路由器主控板是什么_路由器主控芯片系统架构_06

接着我们连接一个网络: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连接交换密钥阶段:

路由器主控芯片系统架构 路由器主控板是什么_linux_07

过一会再查看状态:

路由器主控芯片系统架构 路由器主控板是什么_嵌入式_08

bssid是路由器的mac地址,wpa_state为COMPLETED表示已经成功连接上路由器的wifi了。

查看网络的连接质量:cat /proc/net/wireless

路由器主控芯片系统架构 路由器主控板是什么_linux_09

信号质量的单位是dBm数值进行表示的,图中的level就是信号强度,-50dBm~0表示网络非常好,-90dBm~-50dBm表示网络正常,显然-69还是不错的。

信号查记得检查是否有连接天线:

路由器主控芯片系统架构 路由器主控板是什么_嵌入式_10

配置文件连接

如果我们已经知道了wifi的名称和密码并存储在文件中,实际上可以在启动wpa_supplicant的时候就去连接的。

首先我们把wpa_supplicant这个程序kill掉,同时把无线网卡重新启动下,命令如下:

退出进程:killall wpa_supplicant

关闭无线网卡:ifconfig wlan0 down

开启无线网卡:ifconfig wlan0 up

路由器主控芯片系统架构 路由器主控板是什么_嵌入式_11

然后在内存中建立一个配置文件,内容如下:

network={
ssid="CMCC-6F49"
psk="6F4910!@"
key_mgmt=WPA-PSK
}

路由器主控芯片系统架构 路由器主控板是什么_网关_12

然后重启wpa_supplicant,但是选项中带上这个配置文件:

wpa_supplicant -iwlan0 -c/tmp/wifi.conf &

这里&也可以用-B,区别是-B(守护进程)没有日志可以查看,上述命令运行效果:

路由器主控芯片系统架构 路由器主控板是什么_网关_13

连接wifi成功,ifconfig可以查看wlan0已经获取到ip地址。

路由器主控芯片系统架构 路由器主控板是什么_linux_14