如何在debian中安装无线网卡

记得2003年的时候,Wi-Fi设备用的是WEP加密协议,由于安全性问题而未能获得广泛应用。过去几年802.11获得长足的进步,WPA1/2,EAP-TLS等多种加密技术的实现大大促进了WiFi的传播,AP和无线网卡产品异常丰富,然而兼容Linux的还是屈指可数,能在Linux成功安装无线网卡的不仅仅靠技术和忍者神龟般的耐性,更多时候还要看人品!

在安装无线网卡之前有必要先了解一下WiFi的工作方式:

AP

AP是access point的简称,它将多个无线设备连接,无线设备通过它进行互联,也通过它联系外界,譬如互联网。

WPA

WPA全称是Wi-Fi Protected Access,是一种基于预协商key的加密方式,WPA之前802.11采用了WEP,后来证明是一种失败的加密方式,在安全性方面给Wi-Fi带来了很差的声誉,影响Wi-Fi的普及,WPA的出现扭转了乾坤。个人用户用得最多的是PSK,Pre shared key。
WPA的加密过程

安装无线网卡

在Linux中安装无线网卡驱动有两种方式,一种是通过ndiswrapper使用windows的驱动,另一种使用linux的原生驱动。

在第一种方式中,ndiswrapper是Linux内核中的一个模块,用于加载和运行windows内核的API和NDIS API驱动,换句话来说就是ndiswrapper将linux伪装成windows,使得无线网卡的 windows驱动可以跑在linux之上。Linux fans从心理上是抵触这种方式的,感觉要低windows users一等,其次在实际应用中也存在一些恼人的问题,因此是备选方案。

第二种方式是安装原生的linux的驱动,这种方式是最正宗的,直接由内核驱动硬件,效率也更高些,因此尽可能采用这种方式。可是目前linux针对无线网卡的驱动不多,因此在购买无线网卡之前需要确认一下是否兼容linux,下面是兼容linux的无线网卡列表:http://linux-wless.passys.nl/

b43-phy0 debug: Adding Interface type 2
  b43-phy0 ERROR: Firmware file “b43/ucode5.fw” not found or load failed.
  b43-phy0 ERROR: You must go to http://linuxwireless.org/en/users/Drivers/bcm43xx#devicefirmware and download the correct firmware (version 4).

  1. 查看自己的无线网卡的芯片
alfie:~# lspci -vnn | less
...
02:00.0 Network controller [0280]: Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller [14e4:4320] (rev 03)
        Subsystem: Linksys WPC54G [1737:4320]
        Flags: bus master, fast devsel, latency 64, IRQ 11
        Memory at 24000000 (32-bit, non-prefetchable) [size=8K]
        Capabilities: [40] Power Management version 2
        Kernel driver in use: b43-pci-bridge
        Kernel modules: ssb
...

可以看到Linux内核已经识别到了Linksys WPC54G了,它使用的芯片是Broadcom的BCM4320(我自己也说不清是4306还是4320,在http://lin...中说是以[14e4:4320]里面的数字为准)。

针对Broadcom的芯片,linux社区专门提供了b43驱动,在2.6.17-rc2时,内核引入了bcm43xx这个驱动,从2.6.24开始引入了b43legacy和b43,并废掉bcm43xx,其中b43legacy负责Broadcom4306 ver2以前或者仅有802.11b功能的Broadcom芯片,而b43负责剩下的所有型号芯片。

上面的兼容列表比较含糊,Linksys WPC54G v1.2似乎被b43支持,又似乎被b43legacy支持,也顾不了那么多了,我决定先试一下b43。

识别了网卡之后还不能马上使用,因为Broadcom的芯片工作原理有些特殊,还需要给芯片加载专有的firmware才能正常工作,因为firmware是专有的,所以debian官方源里面不直接提供,需要用户自行下载。

  1. 安装b43-fwcutter

    aptitude install b43-fwcutter

安装b43-fwcutter之后会提示是否自动去http://downloads.openwrt.org/sources下载相应的firmware并解压,此时应该选择否,因为openwrt.org的链接已经失效,需要手工下载。

正确的地址应该是http://mirror2.openwrt.org/sources,我选择了最新的firmware:wl 4.160xxx

wget /home/software http://mirror2.openwrt.org/sources/xxx
cd /home/software && b43-fwcutter -w /lib/firmware xxx

/lib/firmware是b43内核模块默认去寻找Broadcom firmware的地方。

需要说明的是,

  1. 安装wireless-tools

这个软件包提供了几个针对无线网卡的程序,iwconfig,iwlist

4、安装wpasupplicant

debian lenny中对wpasupplicant的介绍
WPA and WPA2 are methods for securing wireless networks, the former using IEEE 802.1X, and the latter using IEEE 802.11i. This software provides key negotiation with the WPA Authenticator, and controls association with IEEE 802.11i networks.

在ubuntu中安装wpa-supplicant
https://help.ubuntu.com/community/WifiDocs/Driver/bcm43xx/Feisty

安装wpasupplicat和wpagui
aptitude install wpasupplicant wpagui
其中wpasupplicant中包含了wpa_cli

安装b43-fwcutter和wireless-tools
其中,boardcom公司为很多无线网卡厂商提供芯片,下面就是linksys wpc54G所使用的芯片
lspci -vnn
由于boardcom是一家商业公司,所以他提供的芯片驱动程序也具有商业性质,因此在debian的源中没有。我们需要通过openwrt.org这个源来下载,openwrt.org是说来话长,暂且按下不表。
b43-fwcutter安装完毕之后,将自动去downloads.openwrt.org/sources/wl_….下载firmware,然而这个链接已经失效,所以需要手工去下载。
wget http://mirror2.openwrt.org/sources/broadcom-wl-4.80.53.0.tar.bz2

然后通过b43-fwcutter -w /lib/firmware broadcom-wl-4.80.53.0.tar.bz2

接着modprobe b43

即可完成

这个时候通过iwlist wlan0 scan来测试驱动是否能够正常使用

alfie:/home/chenr# iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: 00:14:BF:F2:05:B7
                    ESSID:"dd-wrt"
                    Mode:Master
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=73/100  Signal level=-56 dBm  Noise level=-69 dBm
                    Encryption key:on
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (1) : TKIP
                        Authentication Suites (1) : PSK
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
                              24 Mb/s; 36 Mb/s; 54 Mb/s; 6 Mb/s; 9 Mb/s
                              12 Mb/s; 48 Mb/s
                    Extra:tsf=000000295b4c72c0

说明驱动已经可以正常使用了。

接下来需要配置wpa,这又是另外一个话题,先安装wpasupplicant

iwlistiwconfig是wireless-tools中的小程序,其中

iwlist可以通过某长无限网卡扫描到ssid

iwlist wlan0 scanning

iwconfig类似ifconfig,主要为无限网卡提供设置服务。

配置/etc/network/interface

~~~
allow-hotplug wlan0
iface wlan0 inet manual
wpa-ssid dd-wrt
wpa-psk hainanyidong

由于psk的密码明文显示在interface这个文件中,所以需要限制仅root可以对改文件进行修改

chmod 0600 /etc/network/interface

最后启动wlan0,invoke-rc.d networking restart
这句的好处是不需要重启机器。如果使用ifdown wlan0和ifup wlan0会显示尚未定义。

下面两行是用于??

    wpa-driver wext
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf