上次通过更换内核实现成功编译驱动无线网卡,但是启动到系统原内核下依然没有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 1
make[1]: *** [_module_/usr/local/other/wireless7_2] Error 2
make[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!

参考
1
2

http://blog.51cto.com/kking/2096757

Centos&Redhat下bcm43142博通无线网卡linux驱动之二的更多相关文章

  1. Linux/centos/redhat下各种压缩解压缩方式详解

    1.zip命令 zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzip unzip -o -d ...

  2. 如何编写一个简单的Linux驱动(二)——完善设备驱动

    前期知识 1.如何编写一个简单的Linux驱动(一)——驱动的基本框架 2.如何编写一个简单的Linux驱动(二)——设备操作集file_operations 前言 在上一篇文章中,我们编写设备驱动遇 ...

  3. 如何编写一个简单的Linux驱动(二)——设备操作集file_operations

    前期知识 如何编写一个简单的Linux驱动(一)--驱动的基本框架 前言 在上一篇文章中,我们学习了驱动的基本框架.这一章,我们会在上一章代码的基础上,继续对驱动的框架进行完善.要下载上一篇文章的全部 ...

  4. Redis学习---CentOs/RedHat下Redis的安装

    redis是C语言开发,建议在linux上运行,本教程使用Centos6.4作为安装环境.      安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gc ...

  5. CentOS 7下设置Docker代理(Linux下Systemd服务的环境变量配置)

    Docker守护程序使用HTTP_PROXY,HTTPS_PROXY以及NO_PROXY环境变量在其启动环境来配置HTTP或HTTPS代理的行为.无法使用daemon.json文件配置这些环境变量. ...

  6. 为MarS Board安装无线网卡Linux驱动

    玩了几天MarS Board,发现要了解Linux是如何工作的,从嵌入式开发板玩起最有效率.因为会遇到无数的问题和未知领域,然后在解决问题的过程中有深入了解Linux的机会.   为这块开发板专门买了 ...

  7. 在全志平台调试博通的wifi驱动(类似ap6212)【转】

    转自:http://blog.csdn.net/fenzhi1988/article/details/44809779 调试驱动之前,首先先看看驱动代码,了解代码大致工作流程,再根据硬件配置驱动,比如 ...

  8. Linux驱动技术(二) _访问I/O内存

    ARM是对内存空间和IO空间统一编址的,所以,通过读写SFR来控制硬件也就变成了通过读写相应的SFR地址来控制硬件.这部分地址也被称为I/O内存.x86中对I/O地址和内存地址是分开编址的,这样的IO ...

  9. Centos8.3安装broadcom(博通)BCM43142无线网卡驱动,Centos8没有wifi选项(No wifi adapter found centos)解决办法

    参考:杆菌大祭司> https://www.jianshu.com/p/3cb41b7b8fec 第一步:查看网卡型号,确认无线网卡型号为BCMXXX lspci | grep Network ...

随机推荐

  1. 潭州课堂25班:Ph201805201 django 项目 第三十二课 后台站点管理(课堂笔记)

    一.后台站点模版抽取 1.获取静态站点模版 可以使用git clone到本地 git clone https://github.com/almasaeed2010/AdminLTE.git 也可以在g ...

  2. 逻辑回归与神经网络还有Softmax regression的关系与区别

    本文讨论的关键词:Logistic Regression(逻辑回归).Neural Networks(神经网络) 之前在学习LR和NN的时候,一直对它们独立学习思考,就简单当做是机器学习中的两个不同的 ...

  3. angular清除select空格

    <select   class="form-control"   id="policy_set_id"   ng-model="add.poli ...

  4. 多重背包--java

    多重背包 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值 是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大母函数的思想也 ...

  5. python之类和对象

    对象(object)基本上可以看做数据(特性)以及由一系列可以存取.操作这些数据的方法所组成的集合. 类,可以看成种类,类型,从一组对象中提取到的相似部分.所有的对象都属于一个类,称为类的实例. 之前 ...

  6. python每日笔记

    9.28 查看python包路径: sys.path 9.4  sorted高级用法: >>> class Student: def __init__(self, name, gra ...

  7. .Net Core中的通用主机(二)——托管服务

    前文介绍了.Net core的通用主机的配置,在基础配置完成后,下一步就是注册我们的后台任务了..net core提供了一个通用的后台服务接口IHostedService,称为托管服务.一个注册托管服 ...

  8. linux 新建用户、用户组 以及为新用户分配权限(转)

    本文转自https://www.cnblogs.com/clicli/p/5943788.html 感谢作者 Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先 ...

  9. 登录页面和FORM的职责不对称,处理方法,刷新工作流程

    登录页面和FORM的职责不对称,处理方法,刷新工作流程:

  10. 使用CSS里的user-select属性控制用户在页面上选中的内容

    CSS里的user-select属性用来禁止用户用鼠标在页面上选中文字.图片等,也就是,让页面内容不可选.也可以只允许用户选中文字,或者全部都放开,用户可以同时选中文字.还包括文本里的图片.视频等其它 ...