博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Centos&Redhat下bcm43142博通无线网卡linux驱动之二
阅读量:6955 次
发布时间:2019-06-27

本文共 10001 字,大约阅读时间需要 33 分钟。

上次通过实现成功编译驱动无线网卡,但是启动到系统原内核下依然没有bcm43142的驱动,遂准备在原内核下编译驱动,记录一下

ps:更推荐这种方法,避免因更换内核出现其他兼容性问题

1.准备驱动包

hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz

密cmet
下载拷贝进u盘,将源码包拷贝至/usr

2.安装工具

安装gccyum install -y gcc,如已安装可跳过

安装内核对应版本的kernel-headers,kerner-devel,本次使用当前系统镜像作为yum源,所以版本也是一致的

[root@king ~]# yum list|grep kernel kernel.x86_64                           3.10.0-327.el7             @anaconda/7.2 kernel-devel.x86_64                     3.10.0-327.el7             @rhel7.2_iso  kernel-headers.x86_64                   3.10.0-327.el7             @rhel7.2_iso

3.编译源码与安装驱动

复制源码包并解压

[root@king ~]# mkdir -p /usr/local/other/wireless7_2 [root@king ~]# cp /usr/hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz /usr/local/other/wireless7_2 [root@king ~]# cd /usr/local/other/wireless7_2 [root@king wireless7_2]# tar zxf hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz [root@king wireless7_2]# ls hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz  lib  Makefile  src

编译

[root@king wireless7_2]# make KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd` make: *** /lib/modules/3.10.0-327.el7.x86_64/build: No such file or directory.  Stop. make: *** [all] Error 2

报错,分析错误原因,发现/lib/modules/3.10.0-327.el7.x86_64/build软链接失效,重做之

ln -s /usr/src/kernels/3.10.0-327.el7.x86_64/ /lib/modules/3.10.0-327.el7.x86_64/build  #注意做软链接要写绝对路径

重新编译

[root@king wireless7_2]# make clean && make KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd` clean make[1]: Entering directory `/usr/src/kernels/3.10.0-327.el7.x86_64' CFG80211 API is prefered for this kernel version /usr/local/other/wireless7_2/Makefile:85: Neither CFG80211 nor Wireless Extension is enabled in kernel  CLEAN   /usr/local/other/wireless7_2/.tmp_versions  CLEAN   /usr/local/other/wireless7_2/Module.symvers make[1]: Leaving directory `/usr/src/kernels/3.10.0-327.el7.x86_64' KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd` make[1]: Entering directory `/usr/src/kernels/3.10.0-327.el7.x86_64' CFG80211 API is prefered for this kernel version Using CFG80211 API  LD      /usr/local/other/wireless7_2/built-in.o  CC [M]  /usr/local/other/wireless7_2/src/shared/linux_osl.o  CC [M]  /usr/local/other/wireless7_2/src/wl/sys/wl_linux.o  CC [M]  /usr/local/other/wireless7_2/src/wl/sys/wl_iw.o  CC [M]  /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.o /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c: In function ‘wl_cfg80211_get_station’: /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:1460:20: error: ‘STATION_INFO_TX_BITRATE’ undeclared (first use in this function)   sinfo->filled |= STATION_INFO_TX_BITRATE;                    ^ /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:1460:20: note: each undeclared identifier is reported only once for each function it appears in /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:1477:20: error: ‘STATION_INFO_SIGNAL’ undeclared (first use in this function)   sinfo->filled |= STATION_INFO_SIGNAL;                    ^ /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c: At top level: /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:1799:2: warning: initialization from incompatible pointer type [enabled by default]  .get_station = wl_cfg80211_get_station,  ^ /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:1799:2: warning: (near initialization for ‘wl_cfg80211_ops.get_station’) [enabled by default] /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c: In function ‘wl_alloc_wdev’: /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:1894:22: error: incompatible types when assigning to type ‘const struct wiphy_wowlan_support *’ from type ‘struct wiphy_wowlan_support’  wdev->wiphy->wowlan = wl_wowlan_support;                      ^ /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c: In function ‘wl_inform_single_bss’: /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:2037:3: error: incompatible type for argument 3 of ‘cfg80211_inform_bss’   (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);   ^In file included from /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:33:0:include/net/cfg80211.h:4029:1: note: expected ‘enum cfg80211_bss_frame_type’ but argument is of type ‘const u8 *’ cfg80211_inform_bss(struct wiphy *wiphy, ^ /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:2037:3: warning: passing argument 7 of ‘cfg80211_inform_bss’ makes integer from pointer without a cast [enabled by default]   (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);   ^In file included from /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:33:0:include/net/cfg80211.h:4029:1: note: expected ‘u16’ but argument is of type ‘const u8 *’ cfg80211_inform_bss(struct wiphy *wiphy, ^ /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:2037:3: warning: passing argument 8 of ‘cfg80211_inform_bss’ makes pointer from integer without a cast [enabled by default]   (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);   ^In file included from /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:33:0:include/net/cfg80211.h:4029:1: note: expected ‘const u8 *’ but argument is of type ‘size_t’ cfg80211_inform_bss(struct wiphy *wiphy, ^ /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:2037:3: error: too few arguments to function ‘cfg80211_inform_bss’   (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);   ^In file included from /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:33:0:include/net/cfg80211.h:4029:1: note: declared here cfg80211_inform_bss(struct wiphy *wiphy, ^ /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c: In function ‘wl_notify_connect_status’: /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:2124:4: warning: passing argument 3 of ‘cfg80211_ibss_joined’ makes pointer from integer without a cast [enabled by default]    cfg80211_ibss_joined(ndev, (u8 *)&wl->bssid, GFP_KERNEL);    ^In file included from /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:33:0:include/net/cfg80211.h:4219:6: note: expected ‘struct ieee80211_channel *’ but argument is of type ‘unsigned int’ void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid,      ^ /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:2124:4: error: too few arguments to function ‘cfg80211_ibss_joined’    cfg80211_ibss_joined(ndev, (u8 *)&wl->bssid, GFP_KERNEL);    ^In file included from /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:33:0:include/net/cfg80211.h:4219:6: note: declared here void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid,      ^make[2]: *** [/usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.o] Error 1make[1]: *** [_module_/usr/local/other/wireless7_2] Error 2make[1]: Leaving directory `/usr/src/kernels/3.10.0-327.el7.x86_64'make: *** [all] Error 2

发现报错,依次排错

由报错信息知wl_cfg80211_hybrid.c文件第1460,1477,1894,2037,2124行有错,做出如下更改

[root@king wireless7_2]# vim src/wl/sys/wl_cfg80211_hybrid.c 1460 //              sinfo->filled |= STATION_INFO_TX_BITRATE; 1477 //              sinfo->filled |= STATION_INFO_SIGNAL; 1894         wdev->wiphy->wowlan = &wl_wowlan_support; 2035         cbss = cfg80211_inform_bss(wiphy, channel, CFG80211_BSS_FTYPE_UNKNOWN, (const u8 *)(bi->BSSID.octet), 2036                 0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int, 2037                 (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL); 2124                         cfg80211_ibss_joined(ndev, (u8 *)&wl->bssid, &wl->conf->channel, GFP_KERNEL);

tips:vim里按冒号输入set nu显示行号,冒号后接行号定位到该行

重新编译

[root@king wireless7_2]# make clean && make KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd` clean make[1]: Entering directory `/usr/src/kernels/3.10.0-327.el7.x86_64' CFG80211 API is prefered for this kernel version /usr/local/other/wireless7_2/Makefile:85: Neither CFG80211 nor Wireless Extension is enabled in kernel  CLEAN   /usr/local/other/wireless7_2/.tmp_versions  CLEAN   /usr/local/other/wireless7_2/Module.symvers make[1]: Leaving directory `/usr/src/kernels/3.10.0-327.el7.x86_64' KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd` make[1]: Entering directory `/usr/src/kernels/3.10.0-327.el7.x86_64' CFG80211 API is prefered for this kernel version Using CFG80211 API  LD      /usr/local/other/wireless7_2/built-in.o  CC [M]  /usr/local/other/wireless7_2/src/shared/linux_osl.o  CC [M]  /usr/local/other/wireless7_2/src/wl/sys/wl_linux.o  CC [M]  /usr/local/other/wireless7_2/src/wl/sys/wl_iw.o  CC [M]  /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.o /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:1799:2: warning: initialization from incompatible pointer type [enabled by default]  .get_station = wl_cfg80211_get_station,  ^ /usr/local/other/wireless7_2/src/wl/sys/wl_cfg80211_hybrid.c:1799:2: warning: (near initialization for ‘wl_cfg80211_ops.get_station’) [enabled by default]  LD [M]  /usr/local/other/wireless7_2/wl.o  Building modules, stage 2. CFG80211 API is prefered for this kernel version Using CFG80211 API  MODPOST 1 modules  CC      /usr/local/other/wireless7_2/wl.mod.o  LD [M]  /usr/local/other/wireless7_2/wl.ko make[1]: Leaving directory `/usr/src/kernels/3.10.0-327.el7.x86_64'

没有报错

[root@king wireless7_2]# ls built-in.o                                       modules.order   wl.mod.c hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz  Module.symvers  wl.mod.o lib                                              src             wl.o Makefile                                         wl.ko

发现已生成驱动文件wl.ko

安装驱动文件

[root@king wireless7_2]# make install install -D -m 755 wl.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless

4.驱动文件加载和配置

加载驱动文件

[root@king wireless7_2]# insmod wl.ko [root@king wireless7_2]# lsmod|grep wl wl                   6445574  0  cfg80211              572836  1 wl

发现右上角出现wifi选项,驱动加载成功,可以连接wifi啦,Enjoying it!

参考

转载于:https://blog.51cto.com/kking/2096757

你可能感兴趣的文章
AI考拉技术分享会--IDE 常用功能 for Node.js
查看>>
Tomcat session Error
查看>>
HAProxy双机高可用方案之HAProxy+Keepalived
查看>>
mysql忘记密码解决方法
查看>>
Eclipse安装m2eclipse插件(Maven)
查看>>
windows 下最快搭建svn服务器方法
查看>>
获取android系统外置存储卡路径的方法
查看>>
mysql 链接错误
查看>>
php 数组字符串搜索array_search技巧
查看>>
hive中的NULL
查看>>
进程死锁(银行家算法)
查看>>
FragmentTransaction add 和 replace 完全解析
查看>>
1. ASIHttpRequest-创建和执行request
查看>>
mysql中某张表修改较大时的处理
查看>>
如何退出telnet界面
查看>>
nginx+多个tomcat配置
查看>>
sublime实用插件-持续更新
查看>>
DotImage使用教程:从数据库中读写图像
查看>>
行业虚拟化发展趋势——“瑞友杯”虚拟化征文
查看>>
XY问题在开发中的体现
查看>>