kali linux 安装 BCM43227网卡驱动

系统信息:

系统环境
Shell
root @lsw :~# uname -a Linux lsw 3.14-kali1-686-pae #1 SMP Debian 3.14.5-1kali1 (2014-06-07) i686 GNU/Linux
1
2
root @ lsw : ~ # uname -a
Linux lsw 3.14 - kali1 - 686 - pae #1 SMP Debian 3.14.5-1kali1 (2014-06-07) i686 GNU/Linux

无线网卡信息:

Shell
root @lsw :~# lspci 03:00.0 Network controller: Broadcom Corporation BCM43227 802.11b/g/n
1
2
root @ lsw : ~ # lspci
03 : 00.0 Network controller : Broadcom Corporation BCM43227 802.11b / g / n

 

正常情况下,可以通过软件包的方式进行安装:

Shell
# aptitude update # aptitude dist-upgrade # aptitude install linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms
1
2
3
# aptitude update
# aptitude dist-upgrade
# aptitude install linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms

但软件包安装时出现编译错误,故选择从源码手动安装:

1. 首先下载网卡驱动(官网下载本站备份下载 ),如官网可用,请勿下载备份文件。

该驱动支持的硬件为(包含笔者的BCM43227网卡):

Broadcom’s BCM4311-, BCM4312-, BCM4313-, BCM4321-, BCM4322-, BCM43224-, and BCM43225-, BCM43227- and BCM43228-based hardware

2. 编译安装该驱动

Shell
root @lsw :~/hybrid_tmp# make clean; make; KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd` clean make[1]: Entering directory `/usr/src/linux-headers-3.14-kali1-686-pae' CFG80211 API is prefered for this kernel version /root/hybrid_tmp/Makefile:85: Neither CFG80211 nor Wireless Extension is enabled in kernel CLEAN /root/hybrid_tmp/.tmp_versions make[1]: Leaving directory `/usr/src/linux-headers-3.14-kali1-686-pae' KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd` make[1]: Entering directory `/usr/src/linux-headers-3.14-kali1-686-pae' CFG80211 API is prefered for this kernel version Using CFG80211 API LD /root/hybrid_tmp/built-in.o CC [M] /root/hybrid_tmp/src/shared/linux_osl.o CC [M] /root/hybrid_tmp/src/wl/sys/wl_linux.o /root/hybrid_tmp/src/wl/sys/wl_linux.c: In function ‘wl_tkip_printstats’: /root/hybrid_tmp/src/wl/sys/wl_linux.c:3246:7: warning: passing argument 1 of ‘wl->tkipmodops->print_stats’ from incompatible pointer type [enabled by default] /root/hybrid_tmp/src/wl/sys/wl_linux.c:3246:7: note: expected ‘struct seq_file *’ but argument is of type ‘char *’ /root/hybrid_tmp/src/wl/sys/wl_linux.c:3249:4: warning: passing argument 1 of ‘wl->tkipmodops->print_stats’ from incompatible pointer type [enabled by default] /root/hybrid_tmp/src/wl/sys/wl_linux.c:3249:4: note: expected ‘struct seq_file *’ but argument is of type ‘char *’ /root/hybrid_tmp/src/wl/sys/wl_linux.c: In function ‘wl_reg_proc_entry’: /root/hybrid_tmp/src/wl/sys/wl_linux.c:3470:2: error: implicit declaration of function ‘create_proc_entry’ [-Werror=implicit-function-declaration] /root/hybrid_tmp/src/wl/sys/wl_linux.c:3470:22: warning: assignment makes pointer from integer without a cast [enabled by default] /root/hybrid_tmp/src/wl/sys/wl_linux.c:3475:16: error: dereferencing pointer to incomplete type /root/hybrid_tmp/src/wl/sys/wl_linux.c:3476:16: error: dereferencing pointer to incomplete type /root/hybrid_tmp/src/wl/sys/wl_linux.c:3477:16: error: dereferencing pointer to incomplete type cc1: some warnings being treated as errors make[4]: *** [/root/hybrid_tmp/src/wl/sys/wl_linux.o] 错误 1 make[3]: *** [_module_/root/hybrid_tmp] 错误 2 make[2]: *** [sub-make] 错误 2 make[1]: *** [all] 错误 2 make[1]: Leaving directory `/usr/src/linux-headers-3.14-kali1-686-pae' make: *** [all] 错误 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
root @ lsw : ~ / hybrid_tmp # make clean; make;
KBUILD_NOPEDANTIC = 1 make - C / lib / modules / ` uname - r ` / build M = ` pwd ` clean
make [ 1 ] : Entering directory ` / usr / src / linux - headers - 3.14 - kali1 - 686 - pae'
CFG80211 API is prefered for this kernel version
/ root / hybrid_tmp / Makefile : 85 : Neither CFG80211 nor Wireless Extension is enabled in kernel
   CLEAN    / root / hybrid_tmp / .tmp_versions
make [ 1 ] : Leaving directory ` / usr / src / linux - headers - 3.14 - kali1 - 686 - pae'
KBUILD_NOPEDANTIC = 1 make - C / lib / modules / ` uname - r ` / build M = ` pwd `
make [ 1 ] : Entering directory ` / usr / src / linux - headers - 3.14 - kali1 - 686 - pae'
CFG80211 API is prefered for this kernel version
Using CFG80211 API
   LD        / root / hybrid_tmp / built - in .o
   CC [ M ]    / root / hybrid_tmp / src / shared / linux_osl .o
   CC [ M ]    / root / hybrid_tmp / src / wl / sys / wl_linux .o
/ root / hybrid_tmp / src / wl / sys / wl_linux .c : In function ‘ wl_tkip _printstats’ :
/ root / hybrid_tmp / src / wl / sys / wl_linux .c : 3246 : 7 : warning : passing argument 1 of ‘ wl -> tkipmodops -> print _stats’ from incompatible pointer type [ enabled by default ]
/ root / hybrid_tmp / src / wl / sys / wl_linux .c : 3246 : 7 : note : expected ‘ struct seq_file *’ but argument is of type ‘ char *’
/ root / hybrid_tmp / src / wl / sys / wl_linux .c : 3249 : 4 : warning : passing argument 1 of ‘ wl -> tkipmodops -> print _stats’ from incompatible pointer type [ enabled by default ]
/ root / hybrid_tmp / src / wl / sys / wl_linux .c : 3249 : 4 : note : expected ‘ struct seq_file *’ but argument is of type ‘ char *’
/ root / hybrid_tmp / src / wl / sys / wl_linux .c : In function ‘ wl_reg_proc _entry’ :
/ root / hybrid_tmp / src / wl / sys / wl_linux .c : 3470 : 2 : error : implicit declaration of function ‘ create_proc _entry’ [ - Werror = implicit - function - declaration ]
/ root / hybrid_tmp / src / wl / sys / wl_linux .c : 3470 : 22 : warning : assignment makes pointer from integer without a cast [ enabled by default ]
/ root / hybrid_tmp / src / wl / sys / wl_linux .c : 3475 : 16 : error : dereferencing pointer to incomplete type
/ root / hybrid_tmp / src / wl / sys / wl_linux .c : 3476 : 16 : error : dereferencing pointer to incomplete type
/ root / hybrid_tmp / src / wl / sys / wl_linux .c : 3477 : 16 : error : dereferencing pointer to incomplete type
cc1 : some warnings being treated as errors
make [ 4 ] : * * * [ / root / hybrid_tmp / src / wl / sys / wl_linux .o ] 错误 1
make [ 3 ] : * * * [ _module_ / root / hybrid_tmp ] 错误 2
make [ 2 ] : * * * [ sub - make ] 错误 2
make [ 1 ] : * * * [ all ] 错误 2
make [ 1 ] : Leaving directory ` / usr / src / linux - headers - 3.14 - kali1 - 686 - pae'
make : * * * [ all ] 错误 2

编译错误,原因是使用的 create_proc_entry() 函数已经废弃了, 与新的proc_create() 函数接受的参数不同导致的。

需要修改wl_linux.c 文件。下载针对kernel3.1补丁文件,并应用该补丁:

Shell
root @lsw :~/hybrid_tmp# patch -p1 ./src/wl/sys/wl_linux.c < ../wl-6xx-kmod-011_kernel_3.10.patch patching file ./src/wl/sys/wl_linux.c Hunk #1 succeeded at 3236 (offset 7 lines). Hunk #2 succeeded at 3254 (offset 7 lines). Hunk #3 succeeded at 3417 (offset 7 lines). Hunk #4 succeeded at 3447 (offset 7 lines). Hunk #5 succeeded at 3483 (offset 7 lines).
1
2
3
4
5
6
7
root @ lsw : ~ / hybrid_tmp # patch -p1 ./src/wl/sys/wl_linux.c < ../wl-6xx-kmod-011_kernel_3.10.patch
patching file . / src / wl / sys / wl_linux .c
Hunk #1 succeeded at 3236 (offset 7 lines).
Hunk #2 succeeded at 3254 (offset 7 lines).
Hunk #3 succeeded at 3417 (offset 7 lines).
Hunk #4 succeeded at 3447 (offset 7 lines).
Hunk #5 succeeded at 3483 (offset 7 lines).

然后编译安装:

Shell
make clean; make ;
1
make clean ; make ;

此时会在当前目录下生成wl.ko文件,然后安装该模块:

# modprobe lib80211 # modprobe cfg80211 # insmod wl.ko
1
2
3
# modprobe lib80211
# modprobe cfg80211
# insmod wl.ko

此时点击网络图标应该会列出附近的无线网络了。

如果网络驱动依旧无法使用,很可能是 ssb 模块导致的,需要卸载掉该模块。但有时候仅阻止加载ssb模块还不够,因为在Debian 、Ubuntu这类系统上还是会运行,需将其连带的模块一起卸载掉。

首先检查ssb,bcma,wl,或者b43模块是否加载:

Shell
# lsmod | grep "brcmsmac\|ssb\|wl\|b43\|bcma"
1
# lsmod | grep "brcmsmac\|ssb\|wl\|b43\|bcma"

如果安装了,就卸载掉:

Shell
# rmmod brcmsmac # rmmod ssb # rmmod bcma # rmmod wl # insmod wl.ko
1
2
3
4
5
# rmmod brcmsmac
# rmmod ssb
# rmmod bcma
# rmmod wl
# insmod wl.ko

此时无线网络就可以正常使用了。

为了重启后能自动加载,应用以下命令:

Shell
# cp wl.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless # depmod -a # echo modeprobe wl >> /etc/rc.local
1
2
3
# cp wl.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless
# depmod -a
# echo modeprobe wl >> /etc/rc.local

但是重启后会出现无线网络再次无法使用的情况,此时需要把ssb模块添加到禁用名单:

Shell
# echo "blacklist ssb" >> /etc/modprobe.d/blacklist-libnfc.conf # echo "blacklist bcma" >> /etc/modprobe.d/blacklist-libnfc.conf # echo "blacklist b43" >> /etc/modprobe.d/blacklist-libnfc.conf # echo "blacklist brcmsmac" >> /etc/modprobe.d/blacklist-libnfc.conf
1
2
3
4
# echo "blacklist ssb" >> /etc/modprobe.d/blacklist-libnfc.conf
# echo "blacklist bcma" >> /etc/modprobe.d/blacklist-libnfc.conf
# echo "blacklist b43" >> /etc/modprobe.d/blacklist-libnfc.conf
# echo "blacklist brcmsmac" >> /etc/modprobe.d/blacklist-libnfc.conf

并生成新的ramfs文件:

Shell
# cp /boot/initrd.img-`uname -r` /你备份的路径/ # update-initramfs -u # reboot
1
2
3
# cp /boot/initrd.img-`uname -r`  /你备份的路径/
# update-initramfs -u
# reboot

 

搞定。

相关内容:broadcom-sta-dkms bug report

转载于:https://my.oschina.net/yygh/blog/312801

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值