為什麼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.rpmhttp://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm
// 安裝驅動
[root wifi]$ yum -y install kmod-wl
完成後, 我們再驗證一下是否已成功安裝:
[scr wifi]$ iwconfig
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
多了一下"eth1", 是"IEEE 802.11"的, 說明安裝已成功. 這命名比較奇怪, linux下無線
接口不應該是"wlanX"嗎...
再驗證一下:
Memory at fc700000 (64-bit, non-prefetchable) [size=16K]
Kernel driver in use: wl
Kernel modules: wl
可以看到, 對應的驅動(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
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
Errorforwirelessrequest "SetEncode" (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
當網絡改變時,重新配置/etc/wpa_supplicant/wpa_supplicant.conf,先killall wpa_supplicant
再
[root ~]# ifconfig eth1 192.168.2.156
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
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1
再試:
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
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