ubuntu下無線網卡解決經歷 (2012-03-30 13:27)

本文將從比較基礎的層面,逐步講解“安裝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,因爲剛開始搞時也不清楚,最終沒有成功,最後參考下面的帖子完成了驅動安裝
https://help.ubuntu.com/community/WifiDocs/Driver/bcm43xx


摘自http://my.oschina.net/kursk/blog/7896

發佈了18 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章