刚买的树莓派,听说Archlinux 比较难搞,所以搞一下了
因为树莓派3 B自带的wifi模块,所以可以直接连接无线网络。


提示

如果运行shell 的过程中,出现下面的提示
    RTNETLINK answers: Operation not permitted
表示权限不够,可以使用sudo 来提升权限,也可以切换
root 用户 su - /su root

检查驱动

通过查看设备是否存在,来查看驱动是否安装好
通常来说,网卡有俩,一种就是有线网卡,一种是无线网卡。
有线网卡设备名是用 eth 开头,无线网卡设备名用 wl开头,
我们经常见到的就是 eth0 wlan0 等。
网卡都是通过总线接口连接到主板上的,我们现在接口一般俩种
PCI USB ,一般有线网卡都是pci ,我们自己的usb网卡就是usb了。
我们可以通过下面shell 命令来检测驱动是否安装好

PCI

1
2
3
4
5
lspci -v | grep -i eth
# 03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd.
# RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)
从上面的俩条信息,我们可以发现我们的网卡信息和型号,这个表示已经安装
好了驱动,不然是不会识别的。

USB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
dmesg | grep usbcore
# 输出信息
[ 0.143762] usbcore: registered new interface driver usbfs
[ 0.143768] usbcore: registered new interface driver hub
[ 0.143776] usbcore: registered new device driver usb
[ 1.667245] usbcore: registered new interface driver usbhid
[ 19.722812] usbcore: registered new interface driver rt2800usb
# 从上面的输出信息。我们可以看到,我们的usb设备是 rt2800usb
# 如果不确定的可以从 dmesg 再查一下,在registered 前面有信息
dmesg | grep -i 2800
# 输出信息
[ 0.428000] PPP generic driver version 2.4.2
[ 19.722812] usbcore: registered new interface driver rt2800usb
[ 19.777688] rt2800usb 3-1:1.0 wlan1: renamed from wlan0
# 我们可以看到,使用rt2800usb 设备,我们新建了一个wlan1 ,就是我们
# 在使用 ifconfig 里面看到的。

管理设备

获取设备名字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ip link
# 输出
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether d8:cb:8a:6c:33:f6 brd ff:ff:ff:ff:ff:ff
4: vmnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 00:50:56:c0:00:01 brd ff:ff:ff:ff:ff:ff
5: vmnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 00:50:56:c0:00:02 brd ff:ff:ff:ff:ff:ff
6: vmnet8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 00:50:56:c0:00:08 brd ff:ff:ff:ff:ff:ff
7: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
link/ether 44:33:4c:48:22:4c brd ff:ff:ff:ff:ff:ff
# 上面就是我们所有网络设备的名子,vm开头都是虚拟机,虚拟的网卡。
# 我们真实网卡设备名就是,eth0 wlan1
# 通过 eth0: <BOADCAST,MULTICAST,UP,LOWER_UP> ,看到UP 这个表示设备已经启动了,
# 如果是down 表示设备关闭。

启动关闭设备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ip link set wlan1 downo
ip link
# 输出结果
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether d8:cb:8a:6c:33:f6 brd ff:ff:ff:ff:ff:ff
4: vmnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 00:50:56:c0:00:01 brd ff:ff:ff:ff:ff:ff
5: vmnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 00:50:56:c0:00:02 brd ff:ff:ff:ff:ff:ff
6: vmnet8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 00:50:56:c0:00:08 brd ff:ff:ff:ff:ff:ff
7: wlan1: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
link/ether 44:33:4c:48:22:4c brd ff:ff:ff:ff:ff:ff
# 看倒数第二行  wlan1: <BROADCAST,MULTICAST> ,里面的UP字段已经没有了
# 这表示该网卡已经关闭了
ip link set wlan1 up
# 该命令可以打开网卡设备

配置wpa_supplicant

安装

1
2
3
4
# Archlinx
pacman -S wpa_supplicant
# ubuntu
apt-get install wpa_supplicant

配置wpa

1
2
3
4
5
# 在/etc/wpa_supplicant/ 下面新建一个wlan.conf,文件
echo ctrl_interface=/run/wpa_supplicant > wlan.conf
echo update_config=1 >> wlan.conf
# 文件名字只要上下文一致就可以了,可以自己定义
# 文件内容可以自己写进去,内容一致即可

运行

1
2
3
4
5
6
wpa_supplicant -B -D nl80211 -i wlan0 -c /etc/wpa_supplicant/wlan.conf
# 注意最后的文件名字和上面自己创建的一致
# -B 表示后台运行
# -D 设备协议
# -i 设备名
# -c 配件文件

error

1
2
3
4
5
如果上一步运行结果提示: Successfully initialized wpa_supplicant
后面没有别的输出,那就是配置成功了,如果还有另外的,输出
表示肯定还有问题,特别是提示
wlan soft/hardware blocked ,这个表示你的设备被锁定了,需要解锁一下
可以看这个博客

配置网络

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sudo wpa_cli
# 会进入一个交互界面
> scan
# 扫描可以连接的wifi热点
> scan_results
# 输出scan的结果
> add_network
# 输出
> 1
# 添加一个网络配置选项
# 添加成功会输出一个数字,表示选项的序号,
# 这里输出 1 ,下面就是使用 1
> set_network 1 ssid "Wifi名称"
> set_network 1 psk "Wifi密码"
> set_network 1 key_mgmt WPA-PSK/WPA2-PSL
# wifi的名字 密码 就按照本来的填写就可以,不要忘记双引号
# key_mgmt 表示的是,wifi的加密方式,现在的热点一般都是使用
# wpa/wpa2 这种加密,如果是这种方式,直接输入 WPA-PSK即可
# 如果最后失败,可以尝试 WPA2-PSK
> enable_network 1 # 启动该配置
> save_config # 保存当前配置至 /etc/wpa_supplicant/wlan.conf

check

1
2
3
# 退出wpa_cli 测试
iwconfig
# 如果输出结果有刚才自己配置的热点,那就表示配置成功了。

DHCP

一般 Wifi 的 IP 地址获取都使用了 DHCP 协议,

因此我们还需要手动 dhclient wlan0 来自动协商获取 IP 地址。

1
2
3
4
# 安装
sudo pacman -S dhclient
sudo dhclient wlan1 # 如果
ifconfig # 可以查看配置信息

下次使用

下次启动时可以直接使用现有配置来对之前的 Wifi 进行连接
当然不要忘了使用相应命令来进行 DCHP 协商获取 IP 地址。

1
2
sudo wpa_supplicant -B -D nl80211 -i wlan1 -c /etc/wpa_supplicant/wlan.conf
sudo dhclient wlan1