本文將從比較基礎的層面,逐步講解“安裝ubuntu以後無線網卡不能正常上網”問題的解決方法。
軟硬件配置
硬件: DELL N4030
操作系統:Ubuntu 10.04
network管理軟件:使用network manager ,沒有使用ndiswrapper。
首先描述一下正常的無線網卡工作系統應該有哪些特點,再描述可能的錯誤現象。
1、系統安裝有無線網卡驅動,應該能識別硬件
lshw -C network
lshw命令用來顯示系統硬件信息,network說明顯示網卡信息,-C說明顯示詳細內容
正確的情況
*-network
description: Wireless interface
product: BCM4312 802.11b/g
vendor: Broadcom Corporation
physical id: 0
bus info: pci@0000:0c:00.0
logical name: eth1
version: 01
serial: c4:17:fe:75:54:46
width: 64 bits
clock: 33MHz
capabilities: bus_master cap_list ethernet physical wireless
configuration: broadcast=yes driver=wl0 driverversion=5.60.48.36 ip=192.168.104.165 latency=0 multicast=yes wireless=IEEE
802.11
resources: irq:17 memory:f1ffc000-f1ffffff
*-network
description: Ethernet interface
product: NetXtreme BCM5761e Gigabit Ethernet PCIe
vendor: Broadcom Corporation
physical id: 0
bus info: pci@0000:09:00.0
logical name: eth0
version: 10
serial: a4:ba:db:ab:92:b6
width: 64 bits
clock: 33MHz
capabilities: bus_master cap_list ethernet physical
configuration: broadcast=yes driver=tg3 driverversion=3.102 firmware=5761e-v3.60 latency=0 multicast=yes
resources: irq:30 memory:f1ce0000-f1ceffff memory:f1cf0000-f1cfffff
從中可以看出有兩個網卡,一個是無線的,logical name 是eth1;一個是有線的,logical name是eth0。如果沒有安裝驅動,系統未識別硬件,那麼無線可能是顯示不出來的,我遇到一種情況——有線網卡驅動安裝了,卻沒有加載模塊,結果無線網卡network 顯示 unclaim,並且沒有logical name,這種情況只要手動加載,具體辦法下面會講到。
2、如果硬件能識別出來,那麼系統裏應該有相應的模塊
vi /etc/udev/rules.d/70-persistent-net.rules
# This file maintains persistent names for network interfaces.
# See udev(7) for syntax.
#
# Entries are automatically added by the 75-persistent-net-generator.rules
# file; however you are also free to add your own entries.
# PCI device 0x14e4:0x1680 (tg3)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="a4:ba:db:ab:92:b6", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*",
NAME="eth0"
# PCI device 0x14e4:0x4315 (b43-pci-bridge)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="c4:17:fe:75:54:46", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*",
NAME="wlan0"
# PCI device 0x14e4:0x4315 (wl)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="c4:17:fe:75:54:46", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*",
NAME="eth1"
從logical name我們就可以看到,無線網卡eth1對應模塊是wl
下面就要理解兩個命令的區別
lsmod 顯示當前已經被加載的模塊
modprobe -l 顯示所有模塊,包括已加載和未加載的模塊
lsmod | grep wl
wl 1959598 0
lib80211 5046 2 lib80211_crypt_tkip,wl
這說明wl這個模塊已經被加載了,而且wl依賴於lib80211這個模塊
如果沒有出現wl,那麼說明沒有被加載,那麼就要繼續看wl是否存在
modprobe -l | grep wl
kernel/drivers/gpio/twl4030-gpio.ko
kernel/drivers/net/wireless/wl3501_cs.ko
kernel/drivers/net/wireless/rndis_wlan.ko
kernel/drivers/net/wireless/mwl8k.ko
kernel/drivers/net/wireless/iwlwifi/iwlcore.ko
kernel/drivers/net/wireless/iwlwifi/iwlagn.ko
kernel/drivers/net/wireless/iwlwifi/iwl3945.ko
kernel/drivers/net/wireless/wl12xx/wl1251.ko
kernel/drivers/net/wireless/wl12xx/wl1251_spi.ko
kernel/drivers/net/wireless/wl12xx/wl1251_sdio.ko
kernel/drivers/net/wireless/wl12xx/wl1271.ko
kernel/drivers/usb/otg/twl4030-usb.ko
kernel/drivers/input/keyboard/twl4030_keypad.ko
kernel/drivers/input/misc/twl4030-pwrbutton.ko
kernel/drivers/rtc/rtc-twl4030.ko
kernel/drivers/watchdog/twl4030_wdt.ko
kernel/drivers/staging/wlan-ng/prism2_usb.ko
kernel/drivers/uwb/wlp/wlp.ko
kernel/drivers/uwb/i1480/i1480u-wlp/i1480u-wlp.ko
kernel/sound/soc/codecs/snd-soc-twl4030.ko
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
updates/dkms/wl.ko
看到最後一行wl.ko了嗎,ko是模塊名的後綴名,說明這個模塊是存在的,如果沒有很可能是因爲沒有安裝驅動,並需要手動加載,這方面的內容網上很多。例如,按照以下方法安裝:
***************************************************************************
首先 :
lspci -vnn |grep 14e4
0c:00.0 Network controller [0280]: Broadcom Corporation BCM4312 802.11b/g [14e4:4315] (rev 01)
具體pci id:14e4:4315. 4315就是用的無線芯片的具體型號了。
然後:
安裝:mkdir hybrid_wl
cd hybrid_wl
tar xzf <path>/hybrid-portsrc-x86_32-v5.10.91.9.3.tar.gz
我這裏輸入的是tar xzf ../hybrid-portsrc-x86_32-v5.10.91.9.3.tar.gz 因爲我的壓縮 包在上一級目錄。
make clean (optional) make
下面就是移除原來的驅動
lsmod | grep "b43\|ssb\|wl"
rmmod b43
rmmod ssb
rmmod wl
echo "blacklist ssb" >> /etc/modprobe.d/blacklist.conf
echo "blacklist b43" >> /etc/modprobe.d/blacklist.conf
安裝:modprobe lib80211
insmod wl.ko
安裝到這裏,iwconfig就可以看到有個eth1--就是Ubuntu無線網卡了,但是tx-power 還是off的。爲了保險起見,我還加了兩句#modprobe wl---第一次提示沒有wl這個模塊,後來在系統--管理--硬件驅動裏面我把broadcom sta 驅動激活了(原來是沒有的,好像insmod wl.ko後就有了),再次運行這個命令就可以了。
#depmod -s
裝到這就完了,爲了讓這模塊一開始就可以加載,在/etc/modules裏面加上wl就可以了。
/etc/modules: kernel modules to load at boot time.
#
This file contains the names of kernel modules that should be loaded
at boot time, one per line. Lines beginning with "#" are ignored.lpwl
就是上面這樣。在一個wiki上搜到說是在/etc/rc.conf裏面加幾句話,但是ubuntu沒有這個文件。
我原來以爲這樣就可以了。裝完後右上角看無線網絡一直是無線網絡被禁用,百思不得其解。後來在ubuntu論壇上搜了半天,各種原因,看到眼花繚亂,終於在一個回帖中看到,某人說要fn+f2來啓用筆記本的Ubuntu無線網卡才行。
最後的步驟,按下fn+f2.還是不行呢,再重啓,進入系統前狂按fn+f2數次,進去後終於ok了。然後連接無線網絡,輸入密碼,ok拉。
這個方法很簡單麻,不象用ndiswrapper那麼麻煩,而b43的驅動還不支持4315芯片。唯一的壞處是如果更新內核後要重新編譯安裝驅動,不過安裝驅動的步驟還是很簡單的麻。
***************************************************************************
3、下面看看/etc/network/interface這個文件,無數的帖子都說network manager與interface是互相沖突的,我的這個文件內容如下
auto lo
iface lo inet loopback
4、最後說明一下我是如何安裝驅動,我使用過BCM官方的rpm包,也使用過sdiawrapper,因爲剛開始搞時也不清楚,最終沒有成功,最後參考下面的帖子完成了驅動安裝