CentOS 6.5 BCM43142 80211無線網卡驅動安裝

沒事折騰了一下雙系統,在Windows7之外又裝了個CentOS 6.5,裝完之後發現沒有無線網卡驅動,不能連WIFI。於是裝驅動又折騰了好幾個小時。。。這裏記錄一下

1、查看本機的驅動信息

使用iwconfig發現本機沒有無線網卡驅動:

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

eth0      no wireless extensions.

並沒有,好吧自己裝!先看下無線網卡是什麼型號的:

[root@songlee-PC ~]# lspci | grep Network
07: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 -r
2.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
總用量 16
drwxrwxrwx. 2 52258 users 4096 918 2015 lib
-rw-rw-rw-. 1 52258 users 5154 918 2015 Makefile
drwxrwxrwx. 6 52258 users 4096 918 2015 src

[root@songlee-PC hybrid-wl]# make API=WEXT
KBUILD_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=WEXT
KBUILD_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 line
Using 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 line
Using 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.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.32-431.1.2.0.1.el6.x86_64'

[root@songlee-PC hybrid-wl]# make install
install -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 b43
blacklist ssb
blacklist 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.ko
insmod: error inserting 'wl.ko': -1 Unknown symbol in module

查看dmesg

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

Google一下了解到可能是編譯用的kernel-headers、kerner-devel版本與內核版本不一致,於是卸載了通過yum安裝的版本,手動安裝了2.6.32-431版本就OK了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章