和不少同窗同樣,安裝ubuntu之後無線網卡不能正常上網。經過幾天的努力終於解決了這個問題,本文將從比較基礎的層面,逐步講解解決問題。php
軟硬件配置linux
DELL e5400 ubuntu
使用network manager ,沒有用ndiswrapper網絡
由於不少問題表現相同,可是程度不一樣,就像那句話所說,幸福的家庭都是相同,不幸的家庭卻有各自的緣由,因此我不按步驟來解釋,而先描述一下正常的無線網卡工做系統應該有哪些特色,再描述可能的錯誤現象。app
一、系統應該安裝有無線網卡驅動,應該能識別硬件less
lshw -C networkoop
lshw命令用來顯示系統硬件信息,network說明顯示網卡信息,-C說明顯示詳細內容網站
正確的狀況spa
*-network code
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,這種狀況只要手動加載,具體辦法下面會講到。
二、若是硬件能識別出來,那麼系統裏應該有相應的模塊
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無線網卡才行。
ok。最後的步驟,按下fn+f2.仍是不行呢,再重啓,進入系統前狂按fn+f2數次,進去後終於ok了。而後鏈接無線網絡,輸入密碼,ok拉。
這個方法很簡單麻,不象用ndiswrapper那麼麻煩,而b43的驅動還不支持4315芯片。惟一的壞處是若是更新內核後要從新編譯安裝驅動,不過安裝驅動的步驟仍是很簡單的麻。
***************************************************************************
三、下面看看/etc/network/interface這個文件,無數的帖子都說network manager與interface是互相沖突的,個人這個文件內容以下
auto lo
iface lo inet loopback
四、最後說明一下我是如何安裝驅動,我使用過BCM官方的rpm包,也使用過sdiawrapper,由於剛開始搞時也不清楚,最終沒有成功,最後參考下面的帖子完成了驅動安裝