linux 下手动编译安装无线网卡驱动

简介: 先参照 《本地yum源安装GCC 》安装好gcc hp的笔记本上安装了CentOS6.3,没有安装无线网卡驱动,安装这个驱动,在Google上找了好多资料,最后终于解决了这个问题。在这里做点记录,希望也能帮到别人。

先参照 《本地yum源安装GCC 》安装好gcc

hp的笔记本上安装了CentOS6.3,没有安装无线网卡驱动,安装这个驱动,在Google上找了好多资料,最后终于解决了这个问题。在这里做点记录,希望也能帮到别人。

我的机子是32位,CentOS的内核版本是2.6.32-279.19.1.el6.i686,下载的无线网卡驱动是hybrid-portsrc_x86_32-v5_100_82_112.tar.gz

下面是具体的步骤

一:确定无线网卡的型号,驱动下载

第一步要确定机子的无线网卡型号是什么,可以用命令

[root@CentOS ~]$/sbin/lspci | grep Broadcom
02:00.0 Network controller: Broadcom Corporation BCM4313 802.11b/g/n Wireless LAN Controller (rev 01)

[root@CentOS ~]$lspci | grep Wireless

可见对应的驱动为:Broadcom BCM4313

下载驱动:http://www.broadcom.com/support/802.11/linux_sta.php

其中,在下载页面有一个README.txt文件,里面有一段话这样描述:

SUPPORTED DEVICES
—————–
The cards with the following PCI Device IDs are supported with this driver.
Both Broadcom and and Dell product names are described. Cards not listed
here may also work.

BRCM PCI PCI Dell
Product Name Vendor ID Device ID Product ID
————- ———- ——— ———–
4311 2.4 Ghz 0x14e4 0×4311 Dell 1390
4311 Dualband 0x14e4 0×4312 Dell 1490
4311 5 Ghz 0x14e4 0×4313
4312 2.4 Ghz 0x14e4 0×4315 Dell 1395
4313 2.4 Ghz 0x14e4 0×4727 Dell 1501
4321 Dualband 0x14e4 0×4328 Dell 1505
4321 Dualband 0x14e4 0×4328 Dell 1500
4321 2.4 Ghz 0x14e4 0×4329
4321 5 Ghz 0x14e4 0x432a
4322 Dualband 0x14e4 0x432b Dell 1510
4322 2.4 Ghz 0x14e4 0x432c
4322 5 Ghz 0x14e4 0x432d
43224 Dualband 0x14e4 0×4353 Dell 1520
43225 2.4 Ghz 0x14e4 0×4357
43227 2.4 Ghz 0x14e4 0×4358
43228 Dualband 0x14e4 0×4359 Dell 1530

To find the Device ID’s of Broadcom cards on your machines do:
# lspci -n | grep 14e4

运行:
[jimanyu@CentOS ~]$ lspci -n | grep 14e4
02:00.0 0280: 14e4:4727 (rev 01)
0b:00.0 0200: 14e4:1680 (rev 10)

CentOS的内核源码是放在 /usr/src/kernels 目录中; 如果通过在线升级内核, 也是放在这个目录中; 如果你的系统中的 /usr/src/kernels/ 中没有内容,说明没有安装内核的源码包 kernel-devel 软件包; 通过在线安装的内核源码包, 可以通过 yum 安装的, 内核源码会被放到 /usr/src/kernel 下的目录中

[root@host ~]# yum install kernel-headers kernel-devel gcc

如果未安装内核的源码包,在后面make的时候会报错误:

[root@CentOS hybird-wl]$ make -C /lib/modules/`uname -r`/build/ M=`pwd`
make: *** /lib/modules/2.6.32-279.el6.i686/build/: No such file or directory. Stop.

二:建立安装目录

[root@CentOS ~]# mkdir -p /usr/local/src/hybrid-wl
[root@CentOS hybrid-wl]# cd /usr/local/src/hybrid-wl
[root@CentOS hybrid-wl]# tar xvfz /path/to/the/tarball/hybrid-portsrc_x86_32-v5_100_82_112.tar.gz(name of the downloaded file)
[root@CentOS hybrid-wl]# chown -R someuser.somegroup /usr/local/src/hybrid-wl

三:编译

[root@CentOS hybird-wl]$ make

第一次编译,报了如下的错误:

KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
make[1]: Entering directory `/usr/src/kernels/2.6.32-279.el6.i686′
CFG80211 API is prefered for this kernel version
Using CFG80211 API
LD /usr/local/src/hybird-wl/built-in.o
CC [M] /usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.o
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:64: warning: ‘enum tx_power_setting’ declared inside parameter list
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:64: warning: its scope is only this definition or declaration, which is probably not what you want
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1110: warning: ‘enum tx_power_setting’ declared inside parameter list
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1110: error: parameter 2 (‘type’) has incomplete type
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c: In function ‘wl_cfg80211_set_tx_power’:
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1123: error: ‘TX_POWER_AUTOMATIC’ undeclared (first use in this function)
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1123: error: (Each undeclared identifier is reported only once
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1123: error: for each function it appears in.)
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1125: error: ‘TX_POWER_LIMITED’ undeclared (first use in this function)
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1131: error: ‘TX_POWER_FIXED’ undeclared (first use in this function)
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c: At top level:
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1649: warning: initialization from incompatible pointer type
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1651: warning: initialization from incompatible pointer type
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1652: warning: initialization from incompatible pointer type
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1653: warning: initialization from incompatible pointer type
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1654: warning: initialization from incompatible pointer type
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1658: warning: initialization from incompatible pointer type
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c: In function ‘wl_inform_single_bss’:
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:1817: error: too few arguments to function ‘ieee80211_channel_to_frequency’
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c: In function ‘wl_bss_roaming_done’:
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:2117: warning: passing argument 2 of ‘cfg80211_roamed’ from incompatible pointer type
include/net/cfg80211.h:3035: note: expected ‘struct ieee80211_channel *’ but argument is of type ‘u8 *’
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:2117: warning: passing argument 4 of ‘cfg80211_roamed’ makes pointer from integer without a cast
include/net/cfg80211.h:3035: note: expected ‘const u8 *’ but argument is of type ‘s32’
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:2117: warning: passing argument 5 of ‘cfg80211_roamed’ makes integer from pointer without a cast
include/net/cfg80211.h:3035: note: expected ‘size_t’ but argument is of type ‘u8 *’
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:2117: warning: passing argument 6 of ‘cfg80211_roamed’ makes pointer from integer without a cast
include/net/cfg80211.h:3035: note: expected ‘const u8 *’ but argument is of type ‘s32’
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:2117: error: too few arguments to function ‘cfg80211_roamed’
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c: In function ‘wl_bss_connect_done’:
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:2149: warning: passing argument 2 of ‘cfg80211_roamed’ from incompatible pointer type
include/net/cfg80211.h:3035: note: expected ‘struct ieee80211_channel *’ but argument is of type ‘u8 *’
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:2149: warning: passing argument 4 of ‘cfg80211_roamed’ makes pointer from integer without a cast
include/net/cfg80211.h:3035: note: expected ‘const u8 *’ but argument is of type ‘s32’
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:2149: warning: passing argument 5 of ‘cfg80211_roamed’ makes integer from pointer without a cast
include/net/cfg80211.h:3035: note: expected ‘size_t’ but argument is of type ‘u8 *’
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:2149: warning: passing argument 6 of ‘cfg80211_roamed’ makes pointer from integer without a cast
include/net/cfg80211.h:3035: note: expected ‘const u8 *’ but argument is of type ‘s32’
/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.c:2149: error: too few arguments to function ‘cfg80211_roamed’
make[2]: *** [/usr/local/src/hybird-wl/src/wl/sys/wl_cfg80211.o] Error 1
make[1]: *** [_module_/usr/local/src/hybird-wl] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.32-279.el6.i686′
make: *** [all] Error 2

google了一下,发现CentOS6.3版本报的都是相同的错误,找了好多资料都没有好的解决办法。回头再看broadcom的REAMME.txt,里面写了一段话:

If your driver does not build, check to make sure you have installed the
kernel package described in the requirements above.

This driver now supports the new linux cfg80211 wireless configuration API in
addition to the older Wireless Extensions (Wext). The makefile will
automaticly build the right version for your system but it can be
overridden if needed:

# make API=WEXT
or
# make API=CFG80211

尝试重新编译

[root@CentOS hybird-wl]$ make clean
[root@CentOS hybird-wl]$ make API=WEXT

编译通过了,生成了wl.ko这个文件,发现还是得看官方的文档。完成编译后便是安装

[root@CentOS hybird-wl]$ make install

安装就是把文件COPY到/lib/modules/<kernel-version>/kernel/net/wireless 目录。

四:驱动配置

移除所有其它的BROADCOM 无线设备驱动。除了我们已经编译好的驱动外,其它的Broadcom 802.11芯片驱动象b43, bcma和ssb。 这个驱动和我们新的驱动是冲突的。所以我们要先把它们移除。

# lsmod  | grep “b43\|ssb\|bcma\|wl”

如果以下任何一种驱动存在,移除它:

[root@CentOS hybird-wl]$rmmod b43
[root@CentOS hybird-wl]$rmmod ssb
[root@CentOS hybird-wl]$rmmod bcma
[root@CentOS hybird-wl]$rmmod wl

所这些配置加入黑名单,不让它们被使用:

[root@CentOS hybird-wl]$echo “blacklist ssb” >> /etc/modprobe.d/blacklist.conf
[root@CentOS hybird-wl]$echo “blacklist bcma” >> /etc/modprobe.d/blacklist.conf
[root@CentOS hybird-wl]$echo “blacklist b43″ >> /etc/modprobe.d/blacklist.conf

载入新的驱动

[root@CentOS hybird-wl]$modprobe lib80211 # 因为 wl.ko 需要依赖该模块
[root@CentOS hybird-wl]$insmod wl.ko

现在你的网络管理程序应该可以找到设备, 你可以使用无线网络了!最后添加开机启动

[root@butbueatiful wireles_smoudules]# cp wl.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless
[root@butbueatiful wireles_smoudules]# depmod -a
[root@butbueatiful wireles_smoudules]# echo modeprobe wl >> /etc/rc.local

相关文章
|
2月前
|
安全 关系型数据库 MySQL
Linux下安装mysql8.0(以tar.xz包安装--编译安装)
通过上述步骤,您完成了从下载、编译、安装到配置MySQL 8.0的全过程。此过程虽然较为复杂,但提供了对MySQL安装环境的完全控制,有助于满足特定的部署需求。在实际操作中,根据具体的系统环境,可能还需调整部分步骤或解决未预见的依赖问题。始终参考官方文档和社区资源,保持安装过程与最新版本的兼容性。
794 67
|
4月前
|
SQL 关系型数据库 MySQL
linux 上源码编译安装 PolarDB-X
linux 上源码编译安装 PolarDB-X
188 6
linux 上源码编译安装 PolarDB-X
|
4月前
|
Java Linux API
Linux设备驱动开发详解2
Linux设备驱动开发详解
47 6
|
4月前
|
消息中间件 算法 Unix
Linux设备驱动开发详解1
Linux设备驱动开发详解
52 5
|
4月前
|
Ubuntu NoSQL Linux
Linux内核和驱动
Linux内核和驱动
31 2
|
4月前
|
数据采集 Linux
Linux源码阅读笔记20-PCI设备驱动详解
Linux源码阅读笔记20-PCI设备驱动详解
|
5月前
|
存储 JSON Linux
|
5月前
|
Oracle 关系型数据库 Linux
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
通过这一连串的步骤,可以专业且有效地在Linux下为Qt编译Oracle驱动库 `libqsqloci.so`,使得Qt应用能够通过OCI与Oracle数据库进行交互。这些步骤适用于具备一定Linux和Qt经验的开发者,并且能够为需要使用Qt开发数据库应用的专业人士提供指导。
158 1
讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so
|
3月前
|
Linux API
Linux里的高精度时间计时器(HPET)驱动 【ChatGPT】
Linux里的高精度时间计时器(HPET)驱动 【ChatGPT】
|
4月前
|
Linux
【linux】【驱动】<specifier>-map-pass-thru讲解
【linux】【驱动】<specifier>-map-pass-thru讲解
23 0