如何设置WiFi连接

来自百问网嵌入式Linux wiki

如何设置WiFi连接

虽然该示例与 RTL8723BU 芯片有关(该芯片需要WiFi(最低802.11g/n)和Bluetooth 4.0 LE),但是本文中大多数命令还是通用命令,可以应用于任何平台。

安装相应软件包

buildroot下配置

注意:此章节内容操作适用buildroot-2019/2020版本,如果使用我们提供的系统,默认已经支持。
  • iw软件包配置
使用make menucnfig 命令启用如下选项,此选项为iw命令工具包
Symbol: BR2_PACKAGE_IW [=y]
Type  : bool
Prompt: iw
  Location:
    -> Target packages
      -> Networking applications
或者在.config 文件底部加入如下配置项
BR2_PACKAGE_IW=y	  
  • wpa_supplicant软件包配置
使用make menucnfig 命令启用如下选项,此选项为wpa_supplicant命令工具包。
Symbol: BR2_PACKAGE_WPA_SUPPLICANT [=y]
Type  : bool
Prompt: wpa_supplicant
  Location:
    -> Target packages
      -> Networking applications
或者在.config 文件底部加入如下配置项
BR2_PACKAGE_WPA_SUPPLICANT=y
BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y
BR2_PACKAGE_WPA_SUPPLICANT_AP_SUPPORT=y
BR2_PACKAGE_WPA_SUPPLICANT_WIFI_DISPLAY=y
BR2_PACKAGE_WPA_SUPPLICANT_MESH_NETWORKING=y
BR2_PACKAGE_WPA_SUPPLICANT_AUTOSCAN=y
BR2_PACKAGE_WPA_SUPPLICANT_EAP=y
BR2_PACKAGE_WPA_SUPPLICANT_HOTSPOT=y
BR2_PACKAGE_WPA_SUPPLICANT_DEBUG_SYSLOG=y
BR2_PACKAGE_WPA_SUPPLICANT_WPS=y
BR2_PACKAGE_WPA_SUPPLICANT_WPA3=y
BR2_PACKAGE_WPA_SUPPLICANT_CLI=y
BR2_PACKAGE_WPA_SUPPLICANT_WPA_CLIENT_SO=y
BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y
BR2_PACKAGE_WPA_SUPPLICANT_DBUS=y
BR2_PACKAGE_WPA_SUPPLICANT_DBUS_INTROSPECTION=y

yocto下配置安装

ifconfig

注意:此章节内容操作适用于所有Linux开发板
验证是否存在 wlan0 接口(如果该命令正常执行说明驱动程序已启动并且 WiFi 固件已加载):

检查 WLAN 接口

	Board $> ifconfig -a
	lo        Link encap:Local Loopback  
	         LOOPBACK  MTU:65536  Metric:1
	         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
	         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
	         collisions:0 txqueuelen:1000 
	         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
	wlan0     Link encap:Ethernet  HWaddr 60:F1:89:3F:F6:0E  
	         BROADCAST MULTICAST  MTU:1500  Metric:1
	         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
	         TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
	         collisions:0 txqueuelen:1000 
	         RX bytes:0 (0.0 B)  TX bytes:10 (10.0 B)


初始化WLAN接口

	Board $> ifconfig wlan0 up
	wlan0     Link encap:Ethernet  HWaddr 60:F1:89:3F:F6:0E  
	         inet addr:192.168.43.135  Bcast:192.168.43.255  Mask:255.255.255.0
	         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1                   /* UP indicate that your interface is UP */
	         RX packets:19 errors:0 dropped:0 overruns:0 frame:0
	         TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
	         collisions:0 txqueuelen:1000 
	         RX bytes:1774 (1.7 KiB)  TX bytes:2326 (2.2 KiB)

iw

注意:此章节内容操作仅适用于安装过上述软件包的Linux开发板
本节是使用以下命令扫描任何无线接入点的过程:

扫描可用的 SSID(AP)

仅获取 SSID 名称
	Board $> iw dev wlan0 scan |grep SSID
	       SSID: NETWORK1
	       SSID: NETWORK2
列出完整的 SSID 信息
	Board $> iw dev wlan0 scan
	BSS 00:23:5e:4a:28:f9(on wlan0)
	       TSF: 0 usec (0d, 00:00:00)
	       freq: 2412
	       beacon interval: 100 TUs
	       capability: ESS ShortPreamble ShortSlotTime (0x0421)
	       signal: -72.00 dBm
	       last seen: 0 ms ago
	       SSID: NETWORK1
	       Supported rates: 1.0* 2.0* 5.5* 6.0 9.0 11.0* 12.0 18.0 
	       DS Parameter set: channel 1
	       TIM: DTIM Count 0 DTIM Period 1 Bitmap Control 0x0 Bitmap[0] 0x2
	       Country: FR     Environment: Indoor/Outdoor
	               Channels [1 - 13] @ 20 dBm
	       BSS Load:
	                * station count: 1
	                * channel utilisation: 30/255
	                * available admission capacity: 23437 [*32us]
	       ERP: <no flags>
	       Extended supported rates: 24.0 36.0 48.0 54.0 
	       WMM:     * Parameter version 1
	                * u-APSD
	                * BE: CW 15-1023, AIFSN 3
	                * BK: CW 15-1023, AIFSN 7
	                * VI: CW 7-15, AIFSN 2, TXOP 3008 usec
	                * VO: CW 3-7, AIFSN 2, TXOP 1504 usec
	BSS 00:23:5e:96:57:20(on wlan0)
	       TSF: 0 usec (0d, 00:00:00)
	       freq: 2412
	       beacon interval: 100 TUs
	       capability: ESS Privacy ShortPreamble ShortSlotTime (0x0431)
	       signal: -66.00 dBm
	       last seen: 0 ms ago
	       SSID: NETWORK2
	       Supported rates: 1.0* 2.0* 5.5* 6.0 9.0 11.0* 12.0 18.0 
	       DS Parameter set: channel 1
	       Country: FR     Environment: Indoor/Outdoor
	               Channels [1 - 13] @ 20 dBm
	       BSS Load:
	                * station count: 8
	                * channel utilisation: 48/255
	                * available admission capacity: 23437 [*32us]
	       ERP: <no flags>
	       RSN:     * Version: 1
	                * Group cipher: CCMP
	                * Pairwise ciphers: CCMP
	                * Authentication suites: IEEE 802.1X 00-40-96:0
	                * Capabilities: 4-PTKSA-RC 4-GTKSA-RC (0x0028)
	       Extended supported rates: 24.0 36.0 48.0 54.0 
	       WMM:     * Parameter version 1
	                * u-APSD
	                * BE: CW 15-1023, AIFSN 3
	                * BK: CW 15-1023, AIFSN 7
	                * VI: CW 7-15, AIFSN 2, TXOP 3008 usec
	                * VO: CW 3-7, AIFSN 2, TXOP 1504 usec

Wlan 网络附件(没有管理系统联网配置的系统)

注意:此章节内容操作适用于所有Linux开发板

配置 WiFi 连接

配置WiFi连接,使用的是 wpa_supplicant 工具
检查当前配置信息
	Board $> cat /etc/wpa_supplicant.conf
	ctrl_interface=/var/run/wpa_supplicant
	ctrl_interface_group=0
	update_config=1
	network={
	   key_mgmt=NONE
	}
设置 WiFi 的名称和密码
	Board $> wpa_passphrase <your_ssid_name> <your_ssid_key> >> /etc/wpa_supplicant.conf
检查新的配置信息
	Board $> cat /etc/wpa_supplicant.conf
	ctrl_interface=/var/run/wpa_supplicant
	ctrl_interface_group=0
	update_config=1
	network={
	       ssid="your_ssid_name"
	       psk="your_ssid_key"
	}
注意:如果没有 WPA 密钥,则将 psk=... 替换为 key_mgmt=NONE

连接到 SSID

	Board $> wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant.conf
	Successfully initialized wpa_supplicant

链接到 SSID

	Board $> iw wlan0 link
	       SSID: NETWORK1
	       freq: 2462
	       RX: 501 bytes (3 packets)
	       TX: 4056 bytes (22 packets)
	       signal: -75 dBm
	       tx bitrate: 12.0 MBit/s
	       bss flags:      short-preamble short-slot-time
	       dtim period:    1
	       beacon int:     100

为 WLAN 接口分配IP地址

使用 DHCP 客户端获取地址(假设无线网络(关联)具有 DHCP 服务器):
	Board $> udhcpc -i  wlan0
使用 ip 命令来验证 DHCP 分配的 IP 地址:
	Board $> ip addr show wlan0
	3: wlan0:  mtu 1500 qdisc mq state UP qlen 1000
	 link/ether 74:e5:43:a1:ce:65 brd ff:ff:ff:ff:ff:ff
	 inet 192.168.43.135/24 brd 192.168.1.255 scope global wlan0
	 inet6 fe80::76e5:43ff:fea1:ce65/64 scope link 
	    valid_lft forever preferred_lft forever

检查连接性

最基本的连通性测试是使用"ping”命令。在此示例中,无线路由器(关联到)的IP地址为192.168.1.1:
	Board $> ping -I wlan0  192.168.1.1
	PING 192.168.1.1 (192.168.1.1): 56 data bytes
	64 bytes from 192.168.1.1: seq=0 ttl=64 time=14.905 ms
	64 bytes from 192.168.1.1: seq=1 ttl=64 time=30.387 ms
	64 bytes from 192.168.1.1: seq=2 ttl=64 time=20.462 ms
注意:输入 <CTRL + C> 可终止 ping 会话。

启动时自动配置WiFi

注意:此章节内容操作仅适用于stm32 yocto Linux开发板系统

networkctl

Systemd 为名为 systemd-networkd 的网络提供了一项特定的服务,该服务附带了networkctl 工具,该工具可以显示每个网络接口的状态。
	Board $> networkctl --no-pager
	 IDX LINK             TYPE               OPERATIONAL SETUP     
	 1 lo               loopback           carrier     unmanaged 
	 2 eth0             ether              routable    configured
	 3 sit0             sit                off         unmanaged 
	 4 ip6tnl0          tunnel6            off         unmanaged 
	 5 wlan0            wlan               off         unmanaged 
	 6 wlan1            wlan               off         unmanaged
列出 6 个链接。
我们可以看到 eth0 接口是通过配置的信息通过网络进行管理的,并且使用了该接口(可路由)。

如何通过网络设置进行无线配置

目标是通过 systemd-networkd 配置来配置 wlan 网络接口。
所有网络配置都存储在/ lib/systemd/network 或 /etc/systemd/network 中。创建专用于无线接口的文件:
	Board $> cat /lib/systemd/network/51-wireless.network
	         [Match]
	         Name=wlan0
	         
	         [Network]
	         DHCP=ipv4
要将此无线接口连接到特定网络的中,我们需要一些信息,例如网络的SSID和密码。
要查看当前范围内可用的无线网络列表:
	Board $> ifconfig wlan0 up
	Board $> iw dev wlan0 scan |grep SSID
	       SSID: NETWORK1
	       SSID: NETWORK2
将无线网络与无线网卡相连接,此处为 wlan0:
	Board $> mkdir -p /etc/wpa_supplicant/
	         echo "ctrl_interface=/var/run/wpa_supplicant" > /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
	         echo "eapol_version=1" >> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
	         echo "ap_scan=1" >> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
	         echo "fast_reauth=1" >> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
	         echo "" >> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
	         wpa_passphrase SSID_OF_NETWORK PASSWORD_OF_NETWORK >> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
其中 SSID_OF_NETWORK PASSWORD_OF_NETWORK 对应于无线网络的SSID和密码。
注意:/etc/wpa_supplicant 上的文件名必须包含无线接口的名称: wpa_supplicant-wlan0.conf


启用并启动无线配置:
	Board $> systemctl enable wpa_supplicant@wlan0.service
	         systemctl restart systemd-networkd.service
	         systemctl restart wpa_supplicant@wlan0.service