您的位置:首页 > 理论基础 > 计算机网络

Ubuntu 无线网络连接WIFI(b43驱动出现DMA问题的解决)

2015-03-12 15:35 1341 查看
来源:http://blog.csdn.net/yyplc/article/details/7243220

最近碰到了一个很苦恼的问题,无线网络,无法连接到WIFI热点了。虽然能搜索到周围有WIFI热点,但总是连接不上,老提示授权错误,要求输入密码,还好有线网络连接能正常使用。这就纳闷了,前一天还可以用得好好的,现在竟然用不了!虽然以前也碰到过偶尔断线的情况,但是也不至于连接不上。以前用UBUNTU10.10,现在用10.04版本的,笔记本是DELL 1427,物理网卡为Broadcom的b4312,UBUNTU10.04系统内核Linux 2.6.32-33。google,百度了一番,尝试过各种办法,重新卸载,安装无线驱动,卸载又安装network-manager,
真的汗颜network-manager,给我的感觉是问题多多,不稳定。

自从用了UBUNTU做桌面系统,受尽了network-manager各种非人折磨,直到现在,还和network-manager在做革命斗争啊,担心哪天又给我来个绊脚石,浪费我宝贵的时间! 最后无奈重装系统,可是问题依旧! 太可恶了,难道让我抛弃10.04重新回到10.10? 冷静想一下,应该是配置问题,肯定是哪些配置出错了,因为这几天正在折腾UBUNTU和手机Android之间WIFI连接的问题(请见我的另一篇文章),说不定搞坏了系统的网络配置,在卸载和安装的时候又没有做到彻底清除相关配置文件。

网上关于无线网络无法连接的帖子很多,涉及到了方方面面,从应用程序到网卡驱动到LINUX操作系统都有提到,我也基本试过所说的方法,但终究没有解决问题。看来不能瞎折腾,得对症下药,找到关键的地方才行。

无线网卡是能搜索到WIFI网络的,就是连不上,使用dmesg |grep b43 发现下面的现象

wsn@wsn-laptop:~$ dmesg |grep b43
[    0.895694] b43-pci-bridge 0000:0e:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[    0.895710] b43-pci-bridge 0000:0e:00.0: setting latency timer to 64
[   10.406437] b43-phy0: Broadcom 4312 WLAN found (core revision 15)
[   10.525988] Registered led device: b43-phy0::tx
[   10.526005] Registered led device: b43-phy0::rx
[   10.526021] Registered led device: b43-phy0::radio
[   15.604244] b43 ssb0:0: firmware: requesting b43/ucode15.fw
[   15.621385] b43 ssb0:0: firmware: requesting b43/lp0initvals15.fw
[   15.626406] b43 ssb0:0: firmware: requesting b43/lp0bsinitvals15.fw
[   15.764983] b43-phy0: Loading firmware version 410.2160 (2007-05-26 15:32:10)
[   21.681154] b43-phy0 ERROR: Fatal DMA error: 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
[   21.681161] b43-phy0 ERROR: This device does not support DMA on your system. Please use PIO instead.
[   21.681165] b43-phy0: Controller RESET (DMA error) ...
[   21.681173] b43-phy0 ERROR: Fatal DMA error: 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
[   21.681176] b43-phy0 ERROR: This device does not support DMA on your system. Please use PIO instead.
[   21.681179] b43-phy0: Controller RESET (DMA error) ...
[   21.896278] b43-phy0: Loading firmware version 410.2160 (2007-05-26 15:32:10)
[   27.409095] b43-phy0: Controller restarted
[   82.628135] b43-phy0 ERROR: MAC suspend failed
[   82.948120] b43-phy0 ERROR: MAC suspend failed
[   83.268131] b43-phy0 ERROR: MAC suspend failed


看来是网卡BM4312的驱动有问题,我的网卡是:Network controller: Broadcom Corporation BCM4312 802.11b/g (rev 01)

出现了DMA错误"This device does not support DMA on your system. Please use PIO instead"

说的是本笔记本网卡并不支持DMA传输模式,所以驱动报错了。

如果是DMA模式,由于是直接内存访问,相对PIO模式,网卡速度会快一点,但实际应用中没什么区别,那是因为网络的速度是远远跟不上的。

Broadcom公司的有些网卡设备是不支持DMA模式的(甚至和内核版本也有关),下面有说明:

LP-PHY devices: DMA errors on some machines with kernel 2.6. Problem was fixed in 3.0. Using PIO (module param) can be used as workaround for 2.6.

BCM4318 chipset: AP mode does not work because of packet loss in high transmission rates. Hard to debug & fix.

BCM4321: some cards do not work in DMA mode (PIO is needed).

看来我的本本上的网卡不支持DMA模式,这样只能采用PIO模式了。

于是沿着这条线索找到解决办法:

#更改b43.conf的配置文件
wsn@wsn-laptop:~$ sudo touch /etc/modprobe.d/b43.conf
wsn@wsn-laptop:~$ echo "options b43 pio=1 qos=0" | sudo tee -a /etc/modprobe.d/b43.conf
wsn@wsn-laptop:~$ sudo modprobe b43
#然后重启 network-manager
wsn@wsn-laptop:~$ cd /etc/init.d
wsn@wsn-laptop:~$ sudo service network-manger restart


如果不行,重启系统。

wsn@wsn-laptop:~$ dmesg |grep b43
[    0.873775] b43-pci-bridge 0000:0e:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
[    0.873790] b43-pci-bridge 0000:0e:00.0: setting latency timer to 64
[   11.455666] b43-phy0: Broadcom 4312 WLAN found (core revision 15)
[   11.579806] Registered led device: b43-phy0::tx
[   11.579825] Registered led device: b43-phy0::rx
[   11.579841] Registered led device: b43-phy0::radio
[   19.584232] b43 ssb0:0: firmware: requesting b43/ucode15.fw
[   20.181918] b43 ssb0:0: firmware: requesting b43/lp0initvals15.fw
[   20.191591] b43 ssb0:0: firmware: requesting b43/lp0bsinitvals15.fw
[   20.329278] b43-phy0: Loading firmware version 410.2160 (2007-05-26 15:32:


可见b43工作正常,终于可以连接上WIFI了,但遗憾的是,过了一段时间之后又不行了,也难怪昨天能用,今天就不能用了,说明网卡驱动还是有问题!

所以选对网卡驱动和正确配置驱动,这才是解决问题的关键!

Broadcom有3种驱动包可共选择:

brcmsmac/brcmfmac
b43
broadcom-wl

其中broadcom-wl对应一下网卡型号:

PCI-IDName
[14e4:4311]BCM4311
[14e4:4312]BCM4311
[14e4:4313]BCM4311
[14e4:4315]BCM4312
[14e4:4727]BCM4313
[14e4:4328]BCM4321
[14e4:4329]BCM4321
[14e4:432a]BCM4321
[14e4:432b]BCM4322
[14e4:432c]BCM4322
[14e4:432d]BCM4322
[14e4:4353]BCM43224
[14e4:4357]BCM43225
[14e4:4358]BCM43227
[14e4:4359]BCM43228
针对Broadcom公司的网卡,查看对应自己笔记本的网卡

root@wsn-laptop:~# lspci -vnn |grep 14e4

0e:00.0 Network controller [0280]: Broadcom Corporation BCM4312 802.11b/g [14e4:4315] (rev 01)

知道自己的网卡是[14e4:4315], 所以应该用wl才对(Broadcom STA wireless Driver)。于是可以通过一下方式解决:

首先在内核中去掉b43模块:

sudo rmmod b43

sudo rmmod ssb

#加载wl模块如果系统中没有

可以在硬件驱动那里激活broadcom sta wireless driver或者命令行输入

sudo apt-get update
sudo apt-get --reinstall install bcmwl-kernel-source

然后加载wl模块:

sudo insmod wl

最后重启network-mamager或者重启系统即可,

问题最后解决。

总结:其实这个问题的根本原因是驱动和内核版本之间的冲突(驱动也有一些BUG)。所以要么更改驱动,要么升级内核,这样也就不会碰到这种问题了。

解决这个问题花了一天时间,可惜了^``~。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: