[CentOS] CentOS 6.5 driver for a Broadcom Corporation BCM4313 chipset

Wed Jun 11 04:21:04 UTC 2014
HM Johnson <hmj at n5hmj.com>

Hello CentOS admins.

I am an AIX admin bent on learning CentOS.  Yesterday I downloaded
CentOS-6.5-x86_64-bin-DVD1.iso, burned a DVD and loaded it onto a Lenovo
IdeaPad N585 laptop.  All went well, except for getting the integrated
wireless to work.  Here is some info and what I tried so far.

# lspci|egrep -i wireless
06:00.0 Network controller: Broadcom Corporation BCM4313 802.11bgn Wireless
Network Adapter (rev 01)
# uname -r
2.6.32-431.el6.x86_64

I found these instructions for building a driver for the BCM4313 chip set:
http://wiki.centos.org/HowTos/Laptops/Wireless/Broadcom?action=show

I went to this site:
http://www.broadcom.com/support/802.11/linux_sta.php
and downloaded this file:
hybrid-v35_64-nodebug-pcoem-6_30_223_141.tar.gz

No problem with this:
  yum install kernel-headers kernel-devel gcc

I extracted the file:
  mkdir -p /usr/local/src/hybrid-wl
  cd /usr/local/src/hybrid-wl
  pwd
  tar xvfz /root/Downloads/hybrid-v35_64-nodebug-pcoem-6_30_223_141.tar.gz
  chown -R root.root /usr/local/src/hybrid-wl

Now is where the issues begin, with the make (I know bug surprise):
#  make -C /lib/modules/`uname -r`/build/ M=`pwd`
make: *** /lib/modules/2.6.32-431.el6.x86_64/build/: No such file or
directory.  Stop.

Build does not exist? Let's investigate this:
# (cd /lib/modules/2.6.32-431.el6.x86_64/ ; ls -l)|egrep build
lrwxrwxrwx.  1 root root     46 Jun  7 20:11 build ->
../../../usr/src/kernels/2.6.32-431.el6.x86_64
lrwxrwxrwx.  1 root root      5 Jun  7 20:11 source -> build

Ok, so build is a link, let's investigate further:
# cd /lib/modules/2.6.32-431.el6.x86_64/
# cd ../../../usr/src/kernels/
# ls -l
total 4
drwxr-xr-x. 22 root root 4096 Jun  8 19:54 2.6.32-431.17.1.el6.x86_64

Hmmm, so build is a link to:  2.6.32-431.el6.x86_64
         but what exists is:  2.6.32-431.17.1.el6.x86_64

Ok, let's try fixing the link:
# cd /lib/modules/2.6.32-431.el6.x86_64/
# mv build build.bad
# ln -s ../../../usr/src/kernels/2.6.32-431.17.1.el6.x86_64 build
[root at picard 2.6.32-431.el6.x86_64]# ls -l |egrep build
lrwxrwxrwx.  1 root root     51 Jun  9 21:50 build ->
../../../usr/src/kernels/2.6.32-431.17.1.el6.x86_64
lrwxrwxrwx.  1 root root     46 Jun  7 20:11 build.bad ->
../../../usr/src/kernels/2.6.32-431.el6.x86_64
lrwxrwxrwx.  1 root root      5 Jun  7 20:11 source -> build
# ls -ld build
lrwxrwxrwx. 1 root root 51 Jun  9 21:50 build ->
../../../usr/src/kernels/2.6.32-431.17.1.el6.x86_64

Ok, build is now a link pointing to something that exists, lets try the
make again:
# cd /usr/local/src/hybrid-wl
# ls -l
total 20
-rw-r--r--. 1 root root    8 Jun  8 20:27 built-in.o
drwxrwxr-x. 2 root root 4096 Aug  1  2013 lib
-rw-r--r--. 1 root root 4101 Aug  1  2013 Makefile
drwxrwxr-x. 6 root root 4096 Aug  1  2013 src
#  make -C /lib/modules/`uname -r`/build/ M=`pwd`
make: Entering directory `/usr/src/kernels/2.6.32-431.17.1.el6.x86_64'
CFG80211 API is prefered for this kernel version
Using CFG80211 API
  CC [M]  /usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.o
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:79: warning: ‘enum
tx_power_setting’ declared inside parameter list
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:79: warning: its
scope is only this definition or declaration, which is probably not what
you want
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c: In function
‘wl_cfg80211_join_ibss’:
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:726: error:
‘struct cfg80211_ibss_params’ has no member named ‘channel’
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c: At top level:
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1092: warning:
‘enum tx_power_setting’ declared inside parameter list
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1092: error:
parameter 2 (‘type’) has incomplete type
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c: In function
‘wl_cfg80211_set_tx_power’:
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1103: error:
‘TX_POWER_AUTOMATIC’ undeclared (first use in this function)
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1103: error: (Each
undeclared identifier is reported only once
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1103: error: for
each function it appears in.)
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1105: error:
‘TX_POWER_LIMITED’ undeclared (first use in this function)
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1111: error:
‘TX_POWER_FIXED’ undeclared (first use in this function)
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c: At top level:
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1589: warning:
initialization from incompatible pointer type
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1594: warning:
initialization from incompatible pointer type
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1595: warning:
initialization from incompatible pointer type
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1596: warning:
initialization from incompatible pointer type
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1597: warning:
initialization from incompatible pointer type
etc, etc, etc for many, many lines

Wow, I'm not sure where to even begin with this.
Anyone got any ideas?
What I'm trying to get is a CentOS 6.5 driver for a Broadcom Corporation
BCM4313 chipset.

Thanks,