1:前置条件
1:确认 linux设备和WIFI模块之间通讯正常;
2:确认 Linux设备支持 iw, wpa_supplicant, udhcpc 等指令, 可以先搜索一下这三个指令的用法,也可以 “iw --help” 来查看帮助信息
2: 操作流程
2.1 查询无线网卡激活状态
应该会显示 UP,LOWER_UP 信息;
或者直接 ifconfig 看看有没有 wlan0 设备
root@imx8qxpc0mek:~# ip link show wlan0
6: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether dc:0d:30:a2:47:17 brd ff:ff:ff:ff:ff:ff
2.2 WIFI扫描
扫描当前网络条件下,可以接收到哪些WIFI信号,就是手机连接的WIFI名称
root@imx8qxpc0mek:~# iw wlan0 scan | grep SSID
SSID: TP-LINK_9202
SSID: DL-S2110
SSID: ChinaNet-HLZX
SSID: dujunqiu
2.3 WIFI账号密码修改
这里修改的是系统配置的账号密码,也可以通过 “add_network” 手动输入;
wpa_supplicant.conf 是掉电保存的,只修改一次比较方便;
如果系统默认没有 ssid和psk的画,那么就手动增加一下
root@imx8qxpc0mek:~# vi /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1
network={
ssid="dujunqiu"
psk="123456"
}
注意这里是大部分的WIFI访问方式(WPA加密),可通过手机连接WIFI之后,查看WIFI详情->安全性,确认加密方式;如果加密方式不一样,请参考下面
# 不加密
iw dev wlan0 connect "SSID"
# WEP加密
iw dev wlan0 connect "SSID" key 0:"WEP密钥"
2.4 连接WIFI
-B 后台运行, wpa_supplicant.conf 就是我们刚刚修改的文件
root@imx8qxpc0mek:~# wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
Successfully initialized wpa_supplicant
rfkill: Cannot open RFKILL control device
2.5 查看WIFI连接状态
如果没有连接成功的画,会提示 “not connected”;
这里可以用自己的手机热点作为WIFI的发射端,方便查看是否有设备连接上
root@imx8qxpc0mek:~# iw wlan0 link
Connected to 66:6e:97:95:4b:39 (on wlan0)
SSID: dujunqiu
freq: 5180
signal: -74 dBm
tx bitrate: 200.0 MBit/s
这个时候虽然连接上了,但是还无法上网;可以看到wlan0没有自动获取到IP信息,也没有 route路由信息
root@imx8qxpc0mek:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 usb0
192.168.253.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
2.6 设置自动获取IP地址
WIFI连接之后,还要设置一下 DHCP, 不然自带的 ip(ifconfig查看)可能和WIFI的IP不匹配,还是无法上网;
root@imx8qxpc0mek:~# udhcpc -b -i wlan0 -t 1 -T 5 -A 1 -R -H test_111
udhcpc: option -h NAME is deprecated, use -x hostname:NAME
udhcpc: started, v1.27.2
udhcpc: sending discover
udhcpc: sending select for 172.16.5.112
udhcpc: lease of 172.16.5.112 obtained, lease time 86400
/etc/udhcpc.d/50default: Adding DNS 172.16.1.1
再次查看一下路由信息,已经可以获取到 网关的信息;
ifconfig wlan0 查看IP也自动分配了
root@imx8qxpc0mek:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.1.1 0.0.0.0 UG 10 0 0 wlan0
172.16.0.0 0.0.0.0 255.255.240.0 U 0 0 0 wlan0
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 usb0
192.168.253.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
root@imx8qxpc0mek:~# ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr dc:0d:30:a2:47:17
inet addr:172.16.5.112 Bcast:172.16.15.255 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:24473 errors:0 dropped:5 overruns:0 frame:0
TX packets:172 errors:0 dropped:66 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3236863 (3.0 MiB) TX bytes:29964 (29.2 KiB)
3:测试网络状态
经过以上操作,网络已经设置成功,可以 ping 百度了
root@imx8qxpc0mek:~# ping baidu.com
PING baidu.com (110.242.68.66) 56(84) bytes of data.
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=1 ttl=49 time=108 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=2 ttl=49 time=32.7 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=3 ttl=49 time=26.4 ms