在Redhat Linux下无线网卡设置方法
无线上网是近几年来网络发展的重点。由于脱离了物理的线缆限制,无线上网已经成为众多家庭和办公环境的首选方式。许多传统的基于有线局域网的环境也都在向无线迁移,这对于Linux下的驱动程序提出了很迫切。众所周知,对于无线网卡这种新产物,Linux的驱动支持总是慢一拍,大多数网卡的驱动盘都是只有Windows的驱动,直到目前也很少有附加Linux驱动的。这对于Linux在国内的普及和发展造成了很大的障碍。
一、引言
这两天根据实验室内部的需要,承担了改造现有网络,增加无线AP的工程。由于本实验室长期从事Unix/Linux方面的研究和工程项目,有大量的Linux主机需要解决无线上网问题。为此笔者一直在广泛的搜寻Linux下面可以支持无线网卡,也曾经在GOOGLE上查阅了无数资料,包括硬件厂商的、第三方开源支持的,等等。但是这些资料看起来很多,但是实际上符合我的需求的可以说很少,主要有以下几个问题:
1. 现有的叙述Linux下面无线网卡支持方案的文章,绝大多是讲使用ndis wrapper的方式。这个软件包只支持2.6以上内核,对于内核版本2.4.20的根本不支持。而实验室内大多数机器都在使用传统的RedHat 9.0,其内核恰恰用的是2.4.20,如果再需要换内核就比较麻烦了。另外,它使用的重新利用WindowsXP驱动的方式,从里面分析二进制指令以转化成Linux驱动,但是目前转化率并不是100%完善,对windows xp的驱动也不是100%可用。
2. ndis wrapper需要重编译内核,这造成安装过程非常麻烦,另外很多已经在运行的应用是根本不允许再编译内核的。因此,最好拿来驱动编出模块,直接加载就能用。笔者认为驱动程序就是应该使用上尽量简化,比较反感需要重新编译内核的任何应用。
3. 所讲的无线网卡多是PCMICA、USB的,对于标准PCI的讲的相对较少。而我们需要支持的大多数是PC机,使用PCI网卡是最方便的,也是最省钱的。
4. 所讲的无线网卡在市场上不一定好买,所述的型号都是比较老的,或者说是国外广泛使用而在国内市场很少见的。而对于现在市面上最流行的TP-link、D-Link等常见网卡,却很难找到是否可以支持的明确回答,往往回答都很含混,使得读者没有方法判断,也没有精力去买挨个买网卡做实验。
鉴于以上分析,我试用了Madwifi的驱动(http://www.madwifi.org),使用了当前最好买也最便宜(当然假货也最多)的Tp-link 550G 802.11G网卡。这个网卡是TP-link 802.11g的代表产品,是标准PCI接口的,带tp-link的域展功能(将802.11G的有效距离从30、40米扩展到最远108米,是TP-Link的一大独特卖点)。之所以用tp-link,也主要是因为它便宜,好买,对于我们这一下买几十个的规模非常经济。如果改D-link,则每个网卡要贵上一倍。
下面的讲述就不做什么原理分析了,完全按照已经实现的步骤。因此要求读者有最基础的Linux驱动配置知识。所选用的操作系统版本为RedHat 9,内核为2.4.20。对于2.6以上的内核,Madwifi驱动也作了完美支持,读者可以在http://www.madwifi.org找到类似的升级方法。
二、网卡选型
出于省钱和好买的原则,在中关村的一个做电脑生意的朋友处拿了个tp-link 541G的路由器(即AP),又拿了一个550G的无线网卡。541G 用于做AP,550G用于安装在每台PC机上。550G只有“域展”(加大传输距离,号称室外可达800米,没有亲自试过)没有“速展”(最高速率做到了108Mb/s,而且与标准的54M设备兼容)。到目前为止TP-Link的最新无线网卡型号是650G,是两者兼有的新产品。但是当前650G还比较贵,出货少,万一我试验不成功厂家那里不好退货。所以也不好强求所以就作罢了——550G也已经不错了。
通过在网上查找资料,发现这个无线网卡的芯片型号为Atheros AR5005G,是madwifi支持的类型。
三、AP设置
拿回产品之后先设置AP。先简单说一下我们现在的网络环境。我们就一个房间,总共20多台机器,从学校校园网的交换机上面接下来一根100M的对外的LAN线,接到本实验室的一台交换机。交换机端口上划分的子网是159.226.204.0/255.255.255.0.,网关159.226.204.199,然后在实验室里面通过多个HUB一级一级的往下分。
AP的安装还是比较简单的,完全参照产品说明书中的配置方法:
1. 将AP直接接到交换机的某个端口上,或者随便接到局域网的某个HUB上。把AP四个LAN口之一与HUB相连。
2. 找一台笔记本也接到这HUB上,将改笔记本的IP为192.168.1.250/255.255.255.0(AP内置的默认地址)。
3. 打开浏览器,访问AP: http://191.268.1.1:80,在这个WEB界面里先设AP的IP为159.226.204.250。为了安全起见,将AP设上连接密码,例如设essid为“gait-wifi”,设WEB加密方式为128位共享口令,并输入密码(13位ASCII码)。在AP上设定好自动分配IP地址(DHCP)。设完后重启AP。
4. 先找一个迅驰笔记本,测试AP设置是否正常。通过Windows SP2内置的无线网络管理程序,成功的找到了AP,输入密码后连接正常,并且可以正确分配IP地址和DNS。---http://www.bianceng.cn
四、Linux软硬件平台
1. 硬件:普通PC,CPU为AMD AM2 3200+,内存512M。
2. 软件:RedHat 9,内核2.4.20。
五、网卡配置
下面讲关键的部分,Linux下Tp-link无线网卡的配置过程。
1. 找台装好了windows xp和redhat 9.0双系统的机器。拆开机箱,把原来的LAN网卡拿掉,换上550G。按原样装好机箱。
2. 开机先进windows,直接提示找到新硬件。在随网卡所附的驱动盘上找到550G/650G的目录,系统自动搜索驱动,安装后先不用重启。然后还要装TP-link的管理工具,在电脑里找光盘上550G/650G的目录,有一个setup.exe装完即可。重启之后,打开Windows无线管理,搜索无线网络找到AP(essid为gait-wifi),填入密码就可以上网了。IP和DNS的设置都是自动分配的。总之在windows下的安装很简单,说明书讲的很详细了。
3. 重启机器进入red hat 9.0。启动过程中提示原来网卡找不到了,不用理会。
4. 先检查/usr/src/linuc下有没有安装源代码(Madwifi驱动的编译是需要源代码文件的),如果没有,就找到Redhat安装光盘,用rpm –hvi kernel-source-2.4.20-8.rpm(好像在第3张盘)装上。
5. 在编译驱动之前,需要准备源代码目录:
# cd /usr/src/linux
# make menuconfig // 在对话框出现后直接选exit,然后保存配置即可
# vi Makefile // 找到版本号处的“EXTRAVERSION=8-custom”,改成“EXTRAVERSION=8”
# make dep //注意只需make dep,不需make。madwifi需要的只是一些有关系统内核配置信息的头文件,不需要重新编译整个内核。
6. 下载驱动程序源代码:在http://madwifi.sourceforge.net下载到最新版本的源代码包madwifi-cvs-current.tar.gz.
7. 编译驱动程序:
# cp madwifi-cvs-current.tar.gz /tmp
# cd /tmp
# tar zxvf madwifi-cvs-current.tar.gz
# cd madwifi
# make KERNELPATH=/usr/src/linux
8. 安装驱动程序:
# make install
# /sbin/modprobe ath_pci //加载模块。至此网卡应该已经能够成功配置
9. 检查网卡状态:
# dmesg
如果已经成功配置网卡并加载,在dmesg里最后的输出应该可以看到550G的信息。
10. 网卡配置:此时执行/sbin/ifconfig,应当只能看到一个lo接口。这说明无线网卡已经正常安装了,但是还没有经过网络参数配置。下面需要进行无线网卡的配置。
# /sbin/ifconfig ath0 159.226.204.197 netmask 255.255.255.0
上面一句配置接口ath0的属性。此时再执行/sbin/ifconfig,应当能够看到ath0接口了。虽然接口是建立起来了,但是ping交换机是不通的。需要再用iwconfig配置无线接入的参数。
# /sbin/iwconfig ath0 essid “gait-wifi” mode managed key “s:13位ASCII密码” rate auto
然后用iwconfig应该可以看到网卡成功的连接,速率应该是54M. 这时ping 159.226.204.199应该可以ping通:
# ping 159.226.204.199
PING 159.226.204.199 (159.226.204.199) 56(84) bytes of data.
64 bytes from 159.226.204.199: icmp_seq=1 ttl=255 time=0.647 ms
64 bytes from 159.226.204.199: icmp_seq=2 ttl=255 time=7.29 ms
--- 159.226.204.199 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.647/3.968/7.290/3.322 ms
但是上外网还不行。因为路由没有配置。加一句默认路由:
# route add default gw 159.226.204.199
同时在/etc/resolve.conf里加上默认DNS,否则是无法解析域名的。例如:
# cat /etc/resolv.conf
nameserver 202.112.128.51
这时就可以上外网了。例如:
# lynx www.google.com
11. 配置网上自动启动:在以上步骤中成功的使用了无线网卡,但是都是手工敲入的命令,如果机器重启那么一切配置都会丢失了。需要修改系统配置,使之重启机器能够自动生效。这个配置与普通网卡的配置过程相同,都是在/etc/sysconfig/network-scripts下建立网络接口描述文件,并填写正确的配置内容:
# cd /etc/sysconfig/network-scripts
# cp ifcfg-eth0 ifcfg-ath0 //从当初eth0描述文件的基础上直接修改
# vi ifcfg-eth0 //把首部的ONBOOT=yes改成ONBOOT=no,不再启动以太网接口
# vi ifcfg-ath0 //把首部的DEVICE=eth0改成DEVICE=ath0
# vi etc/sysconfig/hwconfig //任意拷贝一段PCI的设备,把driver字段改成“ath_pci”,desc可以任意修改。
# vi /etc/rc.d/rc.local // 最后加一句/sbin/iwconfig ath0 essid “wifiap” mode managed key “s:13位的ASCII密码” rate auto
12. 重启动机器,再测试。All things done.
在以上各步骤中,由于软件和文件系统的具体差异,都可能出现一些问题,尤其是在内核源代码配置和编译过程中。这需要读者综合运用Linux驱动程序方面的基础知识,视具体问题,使用你的智慧和经验加以解决。
六、其它说明
1. 本文所做的实验都在在PC机上进行的,后来又在笔记本上作了实验,使用了同为TP-Link品牌的PCMICA无线网卡TP-610G。这个网卡和550G仅在于接口形式的不同,内核芯片是完全相同的。所以配置方法完全相同,工作的也很正常。但是对于大多数内置无线网卡的笔记本,除了少数厂家提供了官方驱动(如Intel的802.11 B/G系列),其它笔记本仍然存在很多问题。
2. 根据mdwifi的官方声明,这个驱动的当前版本只支持PCI和PCMICA接口的网卡,对于USB尚不支持,想毕是由于技术上尚未实现全面。截止到目前为止仍然没有什么进展。这一点对于网卡选型尤其关键。如果选用了USB无线网卡,本文的方法就失效了,需要再下功夫解决驱动问题。
七、总结
以上是我建立无线AP和在linux下使用无线网卡的全过程,总之还算是比较简单的。这个madwifi驱动适用于几乎所有Atheros芯片的网卡(注意只支持PCI、mini PCI、pcmica的,不支持USB的),内核2.4、2.6都可以,也就是说从red hat7.3就可以用,而且不用重编内核。希望能对在linux下使用无线的人一点参考。
后来笔者测试了一下最新版的Ubuntu 6.04,发现Ubuntu内置了madwifi的驱动,安装之后就能自动识别网卡,这样就省略了上面所有的配置过程,可供参考。但是对于大多数其它发行版(尤其是比较传统的服务器发行版),还是按照本文的方法手工配置。
www.zzzyk.com,学习电脑知识的好地方