天天看點

bcm43142 linux 驅動下載下傳,Centos&Redhat下bcm43142博通無線網卡linux驅動之二

上次通過更換核心實作成功編譯驅動無線網卡,但是啟動到系統原核心下依然沒有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源,是以版本也是一緻的

[[email protected] ~]# 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.編譯源碼與安裝驅動

複制源碼包并解壓

[[email protected] ~]# mkdir -p /usr/local/other/wireless7_2

[[email protected] ~]# cp /usr/hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz /usr/local/other/wireless7_2

[[email protected] ~]# cd /usr/local/other/wireless7_2

[[email protected] wireless7_2]# tar zxf hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz

[[email protected] wireless7_2]# ls

hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz lib Makefile src

編譯

[[email protected] 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 #注意做軟連結要寫絕對路徑

重新編譯

[[email protected] 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行有錯,做出如下更改

[[email protected] 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顯示行号,冒号後接行号定位到該行

重新編譯

[[email protected] 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'

沒有報錯

[[email protected] 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

安裝驅動檔案

[[email protected] wireless7_2]# make install

install -D -m 755 wl.ko /lib/modules/`uname -r`/kernel/drivers/net/wireless

4.驅動檔案加載和配置

加載驅動檔案

[[email protected] wireless7_2]# insmod wl.ko

[[email protected] wireless7_2]# lsmod|grep wl

wl 6445574 0

cfg80211 572836 1 wl

發現右上角出現wifi選項,驅動加載成功,可以連接配接wifi啦,Enjoying it!

參考

1

2