在linux系统下, 各种无线网卡驱动都有两部分组成,一部分是内核模块,另一部分是无线网卡固件。所谓的内核模块,是指在Linux内核kernel中存在的,能够支持该无线网卡的一个模块,Broadcom 43xx系列的无线网卡在内核中对应的模块是b43模块,有了这个模块,无线网卡在系统中就能够被识别到。你在查看无线网卡时,才能够看到你的无线网卡。但是有了这个模块,并不能够保证无线网卡能够正常工作,要想使无线网卡能够正常工作,你还需要装入一个正确的网卡固件,来保证无线网卡能够正常工作。这个无线网卡固件就使我所说的那个另一部分了,大家一般都将其称之为firmware。
无线网卡固件一般都是由硬件厂家来控制的。这些固件,目前在Linux系统下没有任何工具能够打开,他们是一种特殊的文件格式。是以数据的形式提供的。硬件厂家之所以这样做,据我理解,每个无线网卡要想连接到外网,在网络搜索,网络连接,数据传输方面,各个硬件厂家的设计思想和设计方法不同, 各有独到之处,为了保证网卡能够正常使用,又可以保证网卡的设计方法不被其他硬件厂家获悉,所以就采用了这种特殊的形式来帮忙保密。当然,同一个厂家旗下也有好几种不同型号的无线网卡,他们的固件也各不相同,这也许也是因为这个原因吧。就是他们在网络搜索,网络连接,数据传输方面有不同的方法。至于firmware的目的是什么,我们大家都知道,就是要让网卡能够正常的工作起来。使其能够正常的上网。至于我提到的固件的概念,如果有那位知道,请告知我一声,小弟一定洗耳恭听。
好了,言归正传,我们来讨论一下linux系统下Broadcom 43xx系列无线网卡如何连接到网络上。
-
内核模块加载
-
无线网卡模块所在位置
-
无线网卡的内核模块,大部分已经在内核中存在了,具体的位置放在/lib/modules/`uname -r`/kernel/drivers/net/wireless目录下。在这里保护了99%的无线网卡驱动。我想你一般能够找到你所需要的无线网卡模块。
-
-
下载无线网卡模块
-
如果在上面的目录下,没有找到你要的年网卡模块,那么你就需要下载相应的无线网卡模块来编译了。无线网卡内核模块的下载位置是http://linuxwireless.org/en/users/Download
当然,你可以直接下载http://wireless.kernel.org/download/compat-wireless-2.6/compat-wireless-2.6.tar.bz2这个连接提供的包
-
-
编译并安装内核模块
-
下载了内核模块,我们需要编译并安装到内核中才可以使用。具体的操作步骤如下:
上面每一行都是一条命令,将这些命令输入到终端中即可。另外, $(date -I) 代表的是你下载的包名称中的时间日期,并不是包的时间日期格式,换句话说,就是你下载的包全名。这里之所以这样写是因为这些驱动是不断更新的,所以得到的包名有所不同。怕混淆。
-
-
加载无线网卡内核模块
-
一般的无线网卡模块都能够被自动加载到,如果你的无线网卡模块是刚编译安装的,那么,你重启一下计算机,看看,是否能够被加载到。当然,如果你不愿意重启计算机,请按照下面的步骤进行,也可以解决这个问题。具体的步骤是:modprbe b43
这样做如果没有任何信息打印输出,就证明你加载b43模块成功了。这里之所以加载b43模块,是因为当前Broadcom 43xx系列无线网卡使用的都是这个驱动。
-
-
验证无线网卡模块是否加载正确
-
如果无线网卡模块加载正确了,那么你在查看无线网卡时,就会发现无线设备。 具体的查看命令是iwconfig。 执行该命令时,如果你找到了wlan0这样的设备,就说明你加载成功了。也可以通过查看内核日志来看。执行dmesg看看内核中是否有b43一类的话。使用查看内核日志的方法比较快,也比较详细,但是需要你对内核日志有一定的了解以后,才可以做。所以我推荐用iwconfig来查看。
如果无线网卡没有加载正确,请按照上面的方法再做进一步的检查。
-
无线网卡固件加载
只有了无线网卡内核模块,无线网卡还是不能够正常工作的。还需要你提供一个固件才能够正常工作。一般的无线网卡固件都是以一种以一种特殊的格式直接提供响应的文件,放置到/lib/firmware/目录下,就可以使用了。而Broadcom 43xx系列的无线网卡固件比较特殊。这种无线网卡的固件特殊之处在于,它需要你先下载并编译一个无线网卡固件生成工具,然后再下载一个数据包,根据当前使用的无线网卡信息,结合数据包中的信息,使用固件生成工具来生成相应的固件。具体的操作步骤如下:
-
编译固件生成工具
上面每一行都是一条命令,将这些命令输入到终端中即可。
-
生成固件
其中FIRMWARE_INSTALL_DIR指的是固件的安装位置,如果你的系统中要求的位置不在这里,请改变它的值。一般都是要放置在这个位置下的。 另外,上面每一行都是一条命令,将这些命令输入到终端中即可。
需要说明的是,有些网卡用的不一定是wl_apsta_mimo.o文件,具体那些固件使用那些文件,这个需要根据驱动和硬件来定。 如何查看到自己的无线网卡使用的是那个文件来生成固件,请用下面的步骤来获取:
-
执行dmesg |grep -i firmware 看看 "Broadcom 43xx driver" 一行中, Firmware-ID的值是多少,记住这个值
b43-fwcutter -l 的目的是告诉我们能够支持的无线网卡,以及各自获取固件时要用到的文件名。
b43-fwcutter -w 的目的是将无线网卡固件写入到指定的目录下。
-
无线网卡适配
有了上面的几步,无线网卡几步可以用了,此时你只需要重启你的计算机,或者重新加载一下内核模块b43即可。具体的重新加载方法是先执行modprbe -r b43命令,卸载无线网卡内核模块,再执行modprobe b43 重新加载无线网卡驱动。
此时你在网络管理工具中,一定可以找到你自己的无线网卡了,此时使用系统中自带的无线网卡适配工具适配即可。
几个注意事项:
-
在2.6.25的内核中,自带的b43驱动有问题,在同时输入essid和key的时候,会造成内核崩溃的问题,这个问题在新的内核2.6.27上已经不存在了。
-
无线网卡适配,建议使用NetworkManager来适配,这个工具比较方便,尤其是对无线网卡的适配,显得非常容易。
参考文献:
http://linuxwireless.org/en/users/Drivers/b43#fw-b43-new
http://linuxwireless.org/en/users/Download