助您的企业征战互联网 - 苜蓿草网络

linux(ubuntu为例)解决wifi不能用的方法

时间:2014-07-26 00:01     热度:15458    作者:小庄     来源:互联网

无线网卡不能上网,多半是因为没有正确安装无线网卡驱动。下面是解决无线网卡上网问题的方法(以Broadcom 802.11b/g无线网卡为例):

1.查看无线网卡

使用命令:lspci。当然你可以使用文本过滤进行筛选,否则使用该命令将显示很多内容,有可能超过一屏。

我的是博通的无线网卡,以下是我的无线网卡信息:

Network controller: Broadcom Corporation BCM4312 802.11b/g LP-PHY (rev 01)

2. 登陆broadcom官网下载驱动

网址: http://www.broadcom.com/support/802.11/linux_sta.php

其他品牌型号的网卡请自行寻找下载相应的linux驱动

登陆之后会看到32位和64位的驱动程序,另外还有一个说明的文档,注意这个文档相当有用,里面讲述了安装流程及安装过程中出现问题的解决办法。安装过程以及安装过程中出现问题的解决都是参照此文本的。

3.查看无线网卡设备ID,基本上这一步是可选的,即使你的网卡不在支持的列表中,也是可以使用的。

命令:

lspci –n | grep 14e4

4.如若要编译无线网卡驱动,使其成为内核的一个模块,要有相应的工具(kernel developer),当没有相应的工具时候,编译驱动将会产生如下错误:

make: *** /lib/modules/”release”/build: No such file or directory. Stop.

我的系统是ubuntu,安装kernel developer的方法是:

apt-get inatall build-essential linux-headers-generic
apt-get build-dep linux

其实在ubuntu中,kernel developer是已经安装好的。

5.安装下载好的驱动程序。

可以选择驱动程序安装的位置。新建一个目录,并切换到相应的目录,将下载好的驱动程序拷贝至该目录进行安装。相应的操作比较简单。

编译操作:

#make clean(可选)
#make

 执行过程如下(以下过程是自动进行的):

administrator @ubuntu:/usr/app/hybrid_wl$ sudo make clean
KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd` clean
make[1]: 正在进入目录 `/usr/src/linux-headers-2.6.38-8-generic'
CFG80211 API is prefered for this kernel version
/usr/app/hybrid_wl/Makefile:80: Neither CFG80211 nor Wireless Extension is enabled in kernel
make[1]:正在离开目录 `/usr/src/linux-headers-2.6.38-8-generic'
administrator @ubuntu:/usr/app/hybrid_wl$ sudo make
KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
make[1]: 正在进入目录 `/usr/src/linux-headers-2.6.38-8-generic'
CFG80211 API is prefered for this kernel version
Using CFG80211 API
LD      /usr/app/hybrid_wl/built-in.o
CC [M]  /usr/app/hybrid_wl/src/shared/linux_osl.o
CC [M]  /usr/app/hybrid_wl/src/wl/sys/wl_linux.o
CC [M]  /usr/app/hybrid_wl/src/wl/sys/wl_iw.o
CC [M]  /usr/app/hybrid_wl/src/wl/sys/wl_cfg80211.o
LD [M]  /usr/app/hybrid_wl/wl.o
Building modules, stage 2.
CFG80211 API is prefered for this kernel version
Using CFG80211 API
MODPOST 1 modules
WARNING: modpost: missing MODULE_LICENSE() in /usr/app/hybrid_wl/wl.o
see include/linux/module.h for more information
CC      /usr/app/hybrid_wl/wl.mod.o
LD [M]  /usr/app/hybrid_wl/wl.ko
make[1]:正在离开目录 `/usr/src/linux-headers-2.6.38-8-generic'

成功之后将会生成wl.ko文件。

6.查找冲突模块并卸载屏蔽冲突模块,具体操作命令如下:

#查找冲突模块
#lsmod | grep "b43\|wl\|ssb\|bcma"
b43                   296610  0
mac80211              257001  1 b43
cfg80211              156212  2 b43,mac80211
ssb                    45942  1 b43

#卸载冲突模块
# administrator @ubuntu:/usr/app/hybrid_wl$ sudo rmmod b43
[sudo] password for administrator:
administrator @ubuntu:/usr/app/hybrid_wl$ sudo rmmod ssb

#屏蔽冲突模块,阻止其在启动时被加载
administrator @ubuntu:/usr/app/hybrid_wl$sudo echo "blacklist b43">>/etc/modprobe.d/blacklist.conf
bash: /etc/modprobe.d/blacklist.conf: 权限不够
administrator @ubuntu:/usr/app/hybrid_wl$ sudo su
root @ubuntu:/usr/app/hybrid_wl# echo "blacklist b43">>/etc/modprobe.d/blacklist.conf
root @ubuntu:/usr/app/hybrid_wl# echo "blacklist ssb">>/etc/modprobe.d/blacklist.conf

 注:最后几步操作不一定要在root模式下

7.将无线模块加入内核中

如果之前没有安装过无线驱动,需要加载安全模块

#加载安全模块
root @ubuntu:/usr/app/hybrid_wl# modprobe lib80211
root @ubuntu:/usr/app/hybrid_wl# modprobe cfg80211
root @ubuntu:/usr/app/hybrid_wl# insmod wl.ko

注:该步操作不一定要在root模式下,通过tab键可以讲命令补充完整(如果在正确的模式下) 

8.让无线模块开机自启动

administrator @ubuntu:/usr/app/hybrid_wl$sudo  cp  wl.ko  /lib/modules/`uname -r`/kernel /drivers/net/ wireless/
administrator @ubuntu:/usr/app/hybrid_wl$ depmod -a
FATAL: Could not open /lib/modules/2.6.38-8-generic/modules.dep.temp for writing: Permission denied
administrator @ubuntu:/usr/app/hybrid_wl$ sudo depmod -a

9.当出现如下信息时,表明已安装成功。此时,就可以搜寻到无线网络

administrator @ubuntu:/usr/app/hybrid_wl$ lsmod | grep "b43\|wl\|ssb\|bcma"
wl                   2465136  0
cfg80211              156212  1 wl
lib80211               14570  2 lib80211_crypt_tkip,wl

当看不到以上第二行信息时,在步骤5后加上“sudo make API=CFG80211”

可以使用iwconfig查看无线网络的相关信息,以下是我的信息:

administrator @ubuntu:~$ iwconfig
lo        no wireless extensions.
eth0      no wireless extensions.
eth1      IEEE 802.11abg  ESSID:"NWPU-WLan" 
Mode:Managed  Frequency:2.412 GHz  Access Point: 06:1B:B1:21:83:B7  
Retry  long limit:7   RTS thr:off   Fragment thr:off
Power Management:on

注:无线网卡并不是都是显示为eth1

附注:安装过程中的注意事项以及相应问题的解决办法:

1.在将无线模块加入内核时(insmod),也许会出现以下警告:

WARNING:modpost:missing MODULE_LICENSE()

解决:忽略该警告

2.如果看到这样的信息:

insmod: error inserting ‘wl.ko’: -l Unknown symbol in module

这往往是缺少相应的模块,加载相应的模块,问题就可解决,解决办法如下:

#modprobe lib80211 or ieee80211_crypt_tkip(根据自己的系统选择)
#modprobe cfg80211

3.如果无线驱动被加载,但是不起作用,这多半是由ssb模块引起的,有时候将ssb拉黑(将其加入blacklist)并不能完全阻止其在系统启动时不启动(这种情况在Ubuntn/Debian系统上最为常见)。解决办法如下:

检查是否ssb、bcma、wl或者b43被加载

#lsmod | grep "b43\|ssb\|bcma\|wl"

如果被安装,将其删除:

#rmmod ssb
#rmmod bcma
#rmmod wl
#insmod wl

配置好后能连网,但重启后又需要重新配置的情况,请编辑/etc/rc.local文件

#rmmod ssb      #ssb经常顽固启动
#modprobe wl
#modprobe lib80211
#modprobe cfg80211
#insmod /lib/modules/`uname -r`/kernel/drivers/net/wireless/wl.ko
exit 0               #以上配置一定要放在exit 0 的上边

注:详解请参照官网的安装文档

 

标签:  Linux  ubuntu  wifi  无线