大致有两个情况
1 无线网卡无法识别 ifconfig里面根本都没有显示wlan0
如果 iwconfig 查看网线网络里面都是 no wireless extension那么说明没有识别无线网卡。需要寻找适当的驱动,这个时候用lspci -vv命令寻找自己无线网卡的型号
下面这个是我的无线网卡,是Brodcom无线网卡的BCM43227型号,在网上找这个型号的显卡,google一下
通过搜索找到broadcom这个型号的网上驱动 http://www.broadcom.com/support/802.11/linux_sta.php
我的是64bit的ubuntu所以下载了64位的deb安装包,然后结合网页的readme.txt说明文档进行安装。
下面是安装方法,不明白的可以自己看英文的readme.txt 文档
a 解压驱动安装包,解压tar.gz格式的文件到某一文件夹例如 wl-drive
如果之前安装过其他无线驱动,需要卸载此前安装的驱动。 如果有安装b43,brcmscm,ssb,wl这些驱动,则删除他们。
lsmod | grep "brcmsmac\|b43\|ssb\|bcma\|wl"
如果有上面几类驱动,则删除驱动 rmmod b43; rmmod ssb 等等
上面这些驱动只是不再载入到内核中,因为已经remove mod了,但是为了避免他们之后通过其他命令又进行加在,可以将他们加入到黑名单中。
# echo "blacklist ssb" >> /etc/modprobe.d/blacklist.conf # echo "blacklist bcma" >> /etc/modprobe.d/blacklist.conf # echo "blacklist b43" >> /etc/modprobe.d/blacklist.conf # echo "blacklist brcmsmac" >> /etc/modprobe.d/blacklist.conf
b 编译下载的驱动文件成一个LKM(Linux loadable kernel module),LKM是什么呢?linux中的module相当于window里面的driver驱动,而LKM意为可加载内核模块,意思就是可以不用重启系统的情况下就可以直接将驱动模块加载到内核中(而一般我们在windows里面加载驱动的话是要重启的)
切换目录到我们所要的文件比如我解压的文件名是wl-drive。
make clean (optional)
make
然后调用make clean或者make,编译文件。make的目的在于将C/C++文件编译成.o文件,进而编译成可执行文件。 make与make clean的区别在于是否清除编译的原始文件和中间过程文件。做完这一步后,会在wl-drive目录下生成一个名为wl.ko的文件。
make API=CFG80211 or make API=WEXT
另外,我们这个驱动文件还需要用到api文件,所以需要再编译 make API=CFG80211或者 make API=WEXT操作。
最后加载编译好的模块。
modprobe lib80211 或者 modprobe ieee80211_crypt_tkip
其中modprobe的意思是处理模块。如果你在上一步调用的api文件是CFG80211,那么你还要处理cfg80211这个模块。
modprobe cfg80211
处理好模块之后,正是将模块加载到其中
insmod wl.ko
c 加载好了之后,将这一模块载入kernei内核的操作写入到重启文件中,方面每次开机都自动加载无线网卡的驱动。
将编译来的wl.ko文件复制到系统无线网卡驱动的文件夹里面,查看你的系统/lib/modules 文件夹下
如果有以你的名字命名的系统文件夹,比如你的用户名叫xiaoli,那么就放到下面这个路径下
/lib/module/"xiaoli -r"/kernel/drivers/net/wireless ; depmod -a
如果你的系统并没有命名这个文件夹,你也可以找到类似 3.2.0-41-generic这类的文件夹里,放在
/lib/module/"xiaoli -r"/kernel/drivers/net/wireless ; depmod -a
文件拷贝完成后,在/etc/rc.local 文件中写入wl文件,以后开机的时候,系统会自动在之前的..../driver/net/wireless 文件夹中将wl.ko文件加载内核中
# echo modeprobe wl >> /etc/rc.local
这个时候看看你的iwconfig里面是否有显示无线网卡wlan0的信息了? 如果没有可以重启下电脑,或者重启networkmanager的服务
sudo /etc/init.d/networking restart 如果你用的是wicd的管理软件而非默认的networkmanager 也可重启 sudo /etc/init.d/wicd restart
或者用sudo ifup eth0 sudo ifdown eth0 开关你的网卡。
2 无线网卡识别了,但是网络仍旧无法搜到wifi
这个问题是比较但疼的,但是比之前那个好些,好歹iwconfig已经可以识别我们的网卡了。
我之前鼓捣了很久的network manager都没有成功,这次直接卸载掉安装了wicd的网络管理软件
sudo apt-get -y install wicd 安装wicd
sudo apt-get remove network-manager 卸载nm
sudo /etc/init.d/wicd restart 重启 wicd服务
但是安装wicd后,貌似还是无法识别wireless network。
进行iwlist wlan0 scan 也显示interface not support 之类的错误。
iwconfig查询网卡的状态显示power management power off 我开始以为是网卡的电源关闭了,结果用ifconfig wlan0 power on 以及ifup eth1 这些都试了试,结果都不行。。。。
然后我用rfkill list 列出了无线模块的状态。soft blocked状态为yes,hard blocked状态为no,因而猜测多半硬件上是没有问题的,多半是配置没对。让人郁闷的事,是这个:acer-wireless,你没有看错,这也太吭爹了。竟然显示是acer。我整个人都凌乱了。
我发现wifi被blocked了,虽然我不知确切是什么意思,但是肯定不是好事,所以用 rfkill unblock wifi 或者 rfkill unblock all 将wifi的屏蔽还原。
事后查询发现rfkill是一个管理无线网卡模块的命令,unblock 所有的无线模块;通常笔记本有个开关,可以控制本本里边的无线网卡,需要时候开,不需要的时候,关上,省电
因此,我们将device进行block或者unblock可以控制无线网卡的开启状态的。
unblock之后,我重启了wicd(如果你没有删掉netmanager,那么就重启nm服务),sudo /etc/init.d/wicd restart
接下来就可以用了!!!