Linux中配置无线网络
和其他Linux distro一样,Arch Linux的默认内核是模块化的。
所谓模块化,就是指一台主机中不同的硬件驱动都是以modules的形式分开存放在硬盘中,启动时,Udev会根据硬件内容载入相应的驱动,从而使内核能够分别对它们建立不同的接口。
网络设备中,如常见的wlan0、eth0等标识即是内核在启动时认出的不同设备。
根据以上内容,我们可以想象在Linux中为了能够正确配置无线网络一般所需要采取两个步骤:
- 让内核识别硬件,安装正确的驱动程序并进行配置;
- 选择一种无线连接的管理方式让内核对前一步中识别出的接口进行管理。
下面分别从这两个方面将Linux中无线网络的配置过程一一道来。
所使用的环境为Dell Mini 10和Arch Linux。
快速定位
此部分的目的是快速查看无线网络状况,从而确定下一步的工作内容。
这里的命令需要系统中已经安装了net-tools(包含ifconfig命令)和wireless_tools(包含iwconfg命令)软件包,这些工具包含在Arch Linux的base-devel下面。
1. 查看网卡类型:
# lspci | grep -i net
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 02)
03:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g LP-PHY (rev 01)
无线网卡的型号是BCM4312,制造商为Broadcom Corporation。
2. 查看无线和有线接口。
# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 576 metric 1
inet 192.168.3.101 netmask 255.255.255.0 broadcast 255.255.255.255
ether 00:24:e8:ad:c7:09 txqueuelen 1000 (Ethernet)
RX packets 6131 bytes 2904238 (2.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4015 bytes 354136 (345.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 40 base 0x6000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 16436 metric 1
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
wlan0 IEEE 802.11bg ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=0 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:on
系统中共有三个网络接口,eth0和lo为有线接口;wlan0为无线接口。
3. 启动无线接口
# ifconfig wlan0 up
ifconfig: unknown command "up"
# cat /var/log/errors.log
Dec 5 22:30:13 localhost kernel: [ 2889.810545] b43-phy0 ERROR: Firmware file "b43-open/ucode15.fw" not found
无线接口启动失败,系统提示韧体文件找不到(驱动未正确安装)。
上述结果告诉我们,需要安装驱动,才能使系统正确识别无线网卡。
第一部分:识别网卡/安装驱动
查看是否支持的硬件
通过lspci命令,可以得知Dell Mini 10的网卡类型为Broadcom BCM4312,从这篇Arch Wiki关于Broadcom wireless的介绍可知,适用Broadcom的驱动有三种,分别为:
- brcmsmac/brcmfmac
- b43
- broadcom-wl
自己的Broadcom究竟适用哪种驱动呢?在Linux Wireless,有一篇专门介绍b43的文章。
为判断你的网卡究竟是支持哪个驱动,输入以下命令:
# lspci -vnn | grep 14e4
03:00.0 Network controller [0280]: Broadcom Corporation BCM4312 802.11b/g LP-PHY [14e4:4315] (rev 01)
忽略“[]”外的其他内容,根据14e4:4315,在b43支持的硬件中我们发现:
PCI-ID | Supported? | Chip ID | Modes | PHY version | Alternative |
14e4:4315 | yes (2.6.33+) | BCM4312 | b/g | LP (r1) | wl |
不难看出,支持Broadcom BCM4312的硬件驱动是b43。
安装驱动和固件
由Arch Linux对无线设置的介绍,选择从AUR安装“b43-firmware”包。
$ wget --no-check-certificate -c http://aur.archlinux.org/packages/b4/b43-firmware/b43-firmware.tar.gz
$ tar -zxvf b43-firmware.tar.gz
$ cd b43-firmware
$ makepkg
$ sudo pacman -S b43-fwcutter # 软件依赖
$ makepkg
$ sudo pacman -U b43-firmware-5.10.56.27.3-2-i686.pkg.tar.xz
resolving dependencies...
looking for inter-conflicts...
Targets (1): b43-firmware-5.10.56.27.3-2
Total Download Size: 0.00 MB
Total Installed Size: 0.60 MB
Proceed with installation? [Y/n]
(1/1) checking package integrity [######################] 100%
(1/1) checking for file conflicts [######################] 100%
(1/1) installing b43-firmware [######################] 100%
第二部分:无线网络管理
由于家里没有无线路由器,因此只用无线的扫描功能来验证驱动的安装成功与否。
开启无线端口
# ifconfig wlan0 up
扫描可用的接入点
# iwlist wlan0 scan
wlan0 Scan completed :
Cell 06 - Address: 00:21:27:63:A4:18
Channel:9
Frequency:2.452 GHz (Channel 9)
Quality=31/70 Signal level=-79 dBm
Encryption key:on
ESSID:"LIU"
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
12 Mb/s; 24 Mb/s; 36 Mb/s
Bit Rates:9 Mb/s; 18 Mb/s; 48 Mb/s; 54 Mb/s
Mode:Master
Extra:tsf=00000098d5df7181
Extra: Last beacon: 583ms ago
IE: Unknown: 00034C4955
IE: Unknown: 010882848B960C183048
IE: Unknown: 030109
IE: Unknown: 0706434E20010D14
IE: Unknown: 2A0100
IE: Unknown: 32041224606C
IE: WPA Version 1
Group Cipher : TKIP
Pairwise Ciphers (1) : TKIP
Authentication Suites (1) : PSK
其他的配置应该跟有线网络类似。