CentOS 6.5 BCM43142 80211无线网卡驱动安装

来源:互联网 发布:淘宝主图分辨率是多少 编辑:程序博客网 时间:2024/05/21 06:18

没事折腾了一下双系统,在Windows7之外又装了个CentOS 6.5,装完之后发现没有无线网卡驱动,不能连WIFI。于是装驱动又折腾了好几个小时。。。这里记录一下

1、查看本机的驱动信息

使用iwconfig发现本机没有无线网卡驱动:

[root@songlee-PC ~]# iwconfig lo        no wireless extensions.eth0      no wireless extensions.

并没有,好吧自己装!先看下无线网卡是什么型号的:

[root@songlee-PC ~]# lspci | grep Network07:00.0 Network controller: Broadcom Corporation BCM43142 802.11b/g/n (rev 01)

无线网卡型号为BCM43142 802.11

2、去Broadcom官网下载驱动安装包

这里下载的是64位版本:hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz

3、安装内核开发包及GCC

编译broadcom无线驱动需要安装 kernel-headers、kerner-devel以及gcc

但是要注意的是:kernel-headers、kerner-devel一定要与内核版本一致,不然编译出来的驱动无法运行。

先查看一下当前的内核版本:

[root@songlee-PC ~]# uname -r2.6.32-431.el6.x86_64

然后看是否能够直接通过yum安装:

[root@songlee-PC ~]# yum list | grep -E "kernel-headers|kernel-devel"kernel-devel.x86_64                          2.6.32-696.3.2.el6   updates       kernel-headers.x86_64                        2.6.32-696.3.2.el6   updates

发现yum的版本与内核版本不一致!!

没办法,只能手动从CentOS Vault下载rpm进行安装了:

  • CentOS-7:请在 7.N.YYMM/os/x86_64/Packages/ 或 7.N.YYMM/updates/x86_64/Packages/ 目录内找寻 kernel-devel-版本.x86_64.rpm

  • CentOS-6:请在 6.N/os/arch/Packages/ 或 6.N/updates/arch/Packages/ 目录内找寻 kernel-devel-版本.结构.rpm

这里根据内核版本下载了下面两个安装包:

$ wget http://vault.centos.org/6.5/updates/x86_64/Packages/kernel-headers-2.6.32-431.1.2.0.1.el6.x86_64.rpm$ wget http://vault.centos.org/6.5/updates/x86_64/Packages/kernel-devel-2.6.32-431.1.2.0.1.el6.x86_64.rpm$ rpm -ivh /tmp/kernel-headers-2.6.32-431.1.2.0.1.el6.x86_64.rpm$ rpm -ivh /tmp/kernel-devel-2.6.32-431.1.2.0.1.el6.x86_64.rpm$ yum install gcc

4、解压并编译无线网卡驱动

随便找一个目录,解压并编译:

[root@songlee-PC hybrid-wl]# tar xzf hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz[root@songlee-PC hybrid-wl]# ll总用量 16drwxrwxrwx. 2 52258 users 4096 918 2015 lib-rw-rw-rw-. 1 52258 users 5154 918 2015 Makefiledrwxrwxrwx. 6 52258 users 4096 918 2015 src[root@songlee-PC hybrid-wl]# make API=WEXTKBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`make: *** /lib/modules/2.6.32-431.el6.x86_64/build: 没有那个文件或目录。 停止。make: *** [all] 错误 

尝试编译发现报错了。因为/lib/modules/2.6.32-431.el6.x86_64/目录下的 build 软链接有问题:

OK,那就手动创建:

[root@songlee-PC hybrid-wl]# cd /lib/modules/2.6.32-431.el6.x86_64/[root@songlee-PC 2.6.32-431.el6.x86_64]# rm -f build[root@songlee-PC 2.6.32-431.el6.x86_64]# ln -s ../../../usr/src/kernels/2.6.32-431.1.2.0.1.el6.x86_64 build

然后进入原来的解压目录使用make API=WEXT命令再次进行编译:

[root@songlee-PC hybrid-wl]# make API=WEXTKBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`make[1]: Entering directory `/usr/src/kernels/2.6.32-431.1.2.0.1.el6.x86_64'Wireless Extension API specified in command lineUsing Wireless Extension API  LD      /usr/local/src/hybrid-wl/built-in.o  CC [M]  /usr/local/src/hybrid-wl/src/shared/linux_osl.o  CC [M]  /usr/local/src/hybrid-wl/src/wl/sys/wl_linux.o  CC [M]  /usr/local/src/hybrid-wl/src/wl/sys/wl_iw.o  CC [M]  /usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.o  LD [M]  /usr/local/src/hybrid-wl/wl.o  Building modules, stage 2.Wireless Extension API specified in command lineUsing Wireless Extension API  MODPOST 1 modules  CC      /usr/local/src/hybrid-wl/wl.mod.o  LD [M]  /usr/local/src/hybrid-wl/wl.ko.unsigned  NO SIGN [M] /usr/local/src/hybrid-wl/wl.komake[1]: Leaving directory `/usr/src/kernels/2.6.32-431.1.2.0.1.el6.x86_64'[root@songlee-PC hybrid-wl]# make installinstall -D -m 755 wl.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless

make install命令用于将编译生成的wl.ko文件拷贝到/lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/wireless目录中。

5、加载新的驱动

如果已经有正在运行的默认驱动,需要先卸载并加入黑名单:

$ lsmod | grep -E "b43|ssb|bcma"$ rmmod b43$ rmmod ssb$ rmmod bcma

然后在 /etc/modprobe.d/blacklist.conf 中加入以下几行:

blacklist b43blacklist ssbblacklist bcma

加载新的无线驱动程序:

$ modprobe cfg80211$ modprobe lib80211$ insmod wl.ko  (或者modprobe wl)

然后重启网络服务:

$ service network restart正在关闭接口 eth0: 设备状态:3 (断开连接)                                                           [确定]关闭环回接口:                                             [确定]弹出环回接口:                                             [确定]

iwconfig看一下:

[root@songlee-PC ~]# iwconfig lo        no wireless extensions.eth0      no wireless extensions.eth1      IEEE 802.11  ESSID:""  Nickname:""          Mode:Managed  Frequency:2.412 GHz  Access Point: Not-Associated             Bit Rate:72 Mb/s   Tx-Power:24 dBm             Retry min limit:7   RTS thr:off   Fragment thr:off          Power Managementmode:All packets received          Link Quality=5/5  Signal level=0 dBm  Noise level=-31 dBm          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

OK,可以检测到无线网了!!!







踩坑:

一开始我直接使用yum安装的 kernel-headers、kerner-devel,并没有注意到这两个软件包的版本与内核版本不一致。编译出wl.ko文件以后,尝试加载的时候报错了:

[root@songlee-PC wireless]# insmod wl.koinsmod: error inserting 'wl.ko': -1 Unknown symbol in module

查看dmesg

wl: disagrees about version of symbol wireless_send_eventwl: Unknown symbol wireless_send_eventwl: disagrees about version of symbol wireless_send_eventwl: Unknown symbol wireless_send_eventwl: disagrees about version of symbol wireless_send_eventwl: Unknown symbol wireless_send_eventwl: disagrees about version of symbol wireless_send_eventwl: Unknown symbol wireless_send_event

Google一下了解到可能是编译用的kernel-headers、kerner-devel版本与内核版本不一致,于是卸载了通过yum安装的版本,手动安装了2.6.32-431版本就OK了