<<linux下无线上网>>

                    <<linux下无线上网>>
            Tags: linux,linux-tool

1. 为什么linux下无线不可用?

今天, 突然想用无线上网, 正要用iwconfig配置无线设置, 发现系统里根本就没有对应的
无线接口, 但在windows系统下, 无线却用得很是正常.

[scr wifi]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:24:54:9d:4e:e0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.139/24 brd 192.168.1.255 scope global eth0
    inet 10.3.1.4/24 brd 10.3.1.255 scope global eth0:0
3: sit0: <NOARP> mtu 1480 qdisc noop state DOWN
    link/sit 0.0.0.0 brd 0.0.0.0

从"ip a"的输出来看, 并没有类似于wlan0的接口, 第一感觉应该是没有安装相应驱动.

验证一下:

[root ~]# iwconfig
lo        no wireless extensions.
eth0      no wireless extensions.
sit0      no wireless extensions.

确实, 这三接口都不支持无线, 这是对的.

[scr wifi]$ dmesg | grep wlan
[scr wifi]$ lspci -vnn
... ...
03:00.0 Network controller [0280]: Broadcom Corporation BCM4313 802.11b/g LP-PHY [14e4:4727] (rev 01)
        Subsystem: Askey Computer Corp. Device [144f:7179]
        Flags: bus master, fast devsel, latency 0, IRQ 16
07:00.0 Ethernet controller [0200]: Marvell Technology Group Ltd. 88E8059 PCI-E Gigabit Ethernet Controller [11ab:4381] (rev 11)
        Subsystem: Samsung Electronics Co Ltd Device [144d:c551]
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at fc800000 (64-bit, non-prefetchable) [size=16K]
        I/O ports at 5000 [size=256]
        [virtual] Expansion ROM at fc400000 [disabled] [size=128K]
        Capabilities: <access denied>
        Kernel driver in use: sky2
        Kernel modules: sky2
... ...

从"lspci -vnn"的输出, 终于可以确定是没有安装无线驱动, 因为"Broadcom
Corporation BCM4313 802.11b/g LP-PHY" 没有对应的"kernel driver"等. 好吧, 下面
我们把驱动安装上!

"Ethernet controller"是以态网, 就是有有线网络.


2. Broadcom Corporation BCM4313 802.11b/g LP-PHY 对应的驱动是什么? 在那下载?

Broadcom Corporation BCM4313 802.11b/g LP-PHY 对应的驱动是什么? 这我也不知道,
不过这好办, google一下就ok了. 最终找到了一个非常靠普的:
http://www.broadcom.com/support/802.11/linux_sta.php , 该网页上有两个驱动包, 一
个是32位的, 另一个是64位; 但这一驱动合适我的机子吗?  "README"文件
(http://www.broadcom.com/docs/linux_sta/README.txt)就是回答这一问题的根据了.


根据README, 先检查一下, 我机子上的无线网卡是否被这一驱动包支持:

[scr wifi]$ pwd
// To find the Device ID's of Broadcom cards on your machines do:
[scr wifi]$ lspci -n | grep 14e4
03:00.0 0280: 14e4:4727 (rev 01)

对比了一下, 4727确实是支持的, 下面的工作就是把驱动包下载下来, 然后按README一步
一步进行就OK了. 不过对于fedora没这个必要, 因为在已提供了对应的yum源.


3. 安装驱动(fedora版)

[root wifi]$ pwd
// 安装相应的yum源
[root wifi]$ rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm
// 安装驱动
[root wifi]$ yum -y install kmod-wl


完成后, 我们再验证一下是否已成功安装:

[scr wifi]$ iwconfig
lo        no wireless extensions.
eth0      no wireless extensions.
eth1      IEEE 802.11  Nickname:""
          Access Point: Not-Associated
          Link Quality:2  Signal level:183  Noise level:162
          Rx invalid nwid:0  invalid crypt:0  invalid misc:0
sit0      no wireless extensions.

多了一下"eth1", 是"IEEE 802.11"的, 说明安装已成功. 这命名比较奇怪, linux下无线
接口不应该是"wlanX"吗...


再验证一下:
[scr wifi]$ lspci -vnn
... ...
03:00.0 Network controller [0280]: Broadcom Corporation BCM4313 802.11b/g LP-PHY [14e4:4727] (rev 01)
        Subsystem: Askey Computer Corp. Device [144f:7179]
        Flags: bus master, fast devsel, latency 0, IRQ 16
         Memory at fc700000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: <access denied>
        Kernel driver in use: wl
        Kernel modules: wl
07:00.0 Ethernet controller [0200]: Marvell Technology Group Ltd. 88E8059 PCI-E Gigabit Ethernet Controller [11ab:4381] (rev 11)
        Subsystem: Samsung Electronics Co Ltd Device [144d:c551]
        Flags: bus master, fast devsel, latency 0, IRQ 45
        Memory at fc800000 (64-bit, non-prefetchable) [size=16K]
        I/O ports at 5000 [size=256]
        [virtual] Expansion ROM at fc400000 [disabled] [size=128K]
        Capabilities: <access denied>
        Kernel driver in use: sky2
        Kernel modules: sky2
... ...

可以看到, 对应的驱动(wl)已经安装上了.


4. 配置无线网络

4.1 用 iwconfig 和 iwlist

先扫一下, 看看都有什么AP可用:
[root ~]# iwlist eth1 scanning
eth1      Scan completed :
          Cell 01 - Address: 5C:63:BF:40:6B:1E
                    ESSID:"hellome"
                    Mode:Managed
                    Frequency:2.437 GHz (Channel 6)
                    Quality:2/5  Signal level:-71 dBm  Noise level:-95 dBm
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: WPA Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    Encryption key:on
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s
                              48 Mb/s; 54 Mb/s

有一个, ESSID是"hellome", 正是我自己的路由器, 对应密码是"7878787878", PSK加密.

设置要连接到的AP, 和密码:
[root ~]# iwconfig eth1 essid 'hellome'
[root ~]# iwconfig eth1 key 7878787878
Error for wireless request "Set Encode" (8B2A) :
    SET failed on device eth1 ; Invalid argument.

设置essid没任何问题, 但设置key却不行! google一下, 有网友说是 iwconfig 工具不支
持PSK加密方式, 无奈只能用别的了.


4.2 用 wpa_supplicant

wpa_supplicant是一个用于管理无线网络的工具包, 很是好用, 它可以通过命令行的方式
来设置, 也可以通过读取配置文件的方式.


先新建或修改一下配置文件:

[root ~]# vi /etc/wpa_supplicant/wpa_supplicant.conf
# 可有可无, 没有的话无法用wpa_cli terminate来关闭wpa_supplicant
ctrl_interface=/var/run/wpa_supplicant
# 确保只有root用户能读取WPA的配置, 可有可无, 尤其是在嵌入式设备上
ctrl_interface_group=0
# 使用wpa_supplicant来扫描和选择AP, 也可以设置成0或2, 但只有1才能正确工作
ap_scan=1
network={
   ssid="hellome"       # AP的名字
   psk="7878787878"     # AP的key
}


设置IP并运行wpa_supplicant:

[root ~]# pwd
// 起用eth1
[root ~]# ifconfig eth1 up
// 设置ip地址
[root ~]# ifconfig eth1 192.168.1.156
// ## 运行 wpa_supplicant :
// # // -B 代表后台运行
// # // -Dwext 代表网卡芯片是wext
// # // -ieth1 代表使用设备eth1
// # // -c 指定配置文件
[root ~]# wpa_supplicant -B -Dwext -ieth1 -c/etc/wpa_supplicant/wpa_supplicant.conf


测试一下, 网络是否已连通(192.168.1.1是我的路由器的ip):

[root ~]# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
 64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=1.74 ms
 64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=1.58 ms
 64 bytes from 192.168.1.1: icmp_req=3 ttl=64 time=1.98 ms
^C

OK! 没问题, 能连上路由器了, 现试一下biadu:

[root ~]# ping www.baidu.com
ping: unknown host www.baidu.com

居然不通! 有可能是没路由或没DNS服务:

[root ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
 172.16.198.0    0.0.0.0         255.255.255.0   U     0      0        0 vmnet1
 172.16.77.0     0.0.0.0         255.255.255.0   U     0      0        0 vmnet8

嗯! 真的是路由问题, 默认路由没有. 增加默认路由:

[root ~]# route add default gw 192.168.1.1
[root ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
 172.16.198.0    0.0.0.0         255.255.255.0   U     0      0        0 vmnet1
 172.16.77.0     0.0.0.0         255.255.255.0   U     0      0        0 vmnet8
 0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth1

再试:

[root ~]# ping www.baidu.com
PING www.a.shifen.com (220.181.111.147) 56(84) bytes of data.
 64 bytes from 220.181.111.147: icmp_req=1 ttl=51 time=106 ms
 64 bytes from 220.181.111.147: icmp_req=2 ttl=51 time=104 ms
^C

OK!

可以把以上命令写到 /etc/rc.d/rc.local 文件下, 这样开机无线就自动配置好了.


5. reference

Broadcom Corporation 802.11 Linux STA driver
http://www.broadcom.com/support/802.11/linux_sta.php
http://www.broadcom.com/docs/linux_sta/README.txt

Linux WPA/WPA2/IEEE 802.1X Supplicant
http://hostap.epitest.fi/wpa_supplicant/

Example wpa_supplicant configuration file
http://hostap.epitest.fi/gitweb/gitweb.cgi?p=hostap.git;a=blob_plain;f=wpa_supplicant/wpa_supplicant.conf

wpa_supplicant使用笔记
http://hi.baidu.com/aberlee/blog/item/acb0a3d3ca0f64d9a9ec9af0.html/cmtid/76f0f80165cf8e081c958324
阅读更多
个人分类: linux linux-tool
上一篇<<80x86寄存器介绍>>
下一篇<<跟我一起写 Makefile>>
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭