Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4041257
  • 博文数量: 366
  • 博客积分: 9916
  • 博客等级: 中将
  • 技术积分: 7195
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-29 23:27
个人简介

简单!

文章分类

全部博文(366)

文章存档

2013年(51)

2012年(269)

2011年(46)

分类: LINUX

2012-03-30 13:27:38

本文将从比较基础的层面,逐步讲解“安装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: 

       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: 

       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就是用的无线芯片的具体型号了。
然后:
在broadcom的网站上下载linux下的驱动。

安装:mkdir hybrid_wl
cd hybrid_wl
tar xzf /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,因为刚开始搞时也不清楚,最终没有成功,最后参考下面的帖子完成了驱动安装



摘自http://my.oschina.net/kursk/blog/7896
阅读(64221) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

txgc_wm2012-03-30 15:16:59

现在我遇到的一种状况是驱动安装了,但还是不能无线上网。
查看了以下一些信息:
# lshw -C network
  *-network DISABLED      
       description: Wireless interface
       product: Broadcom Corporation
       vendor: Broadcom Corporation
       physical id: 0
       bus info: pci@0000:12:00.0
       logical name: eth1
&n