linux and the Broadcom STA wireless driver

Jan. 18, 2010

on the recent release of the 2.6.32 series kernel in the slackware-current branch, currently, it has posed a bit of a minor frustration on this Dell mini 9″ and its broadcom 4312

vbatts@mini:~$ lspci | grep Network
03:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g (rev 01)

appearantly in the kernel headers, the definition of schedule() has moved around a little. Using the drivers downloaded from here (currently version, if you are getting an error like

vbatts@current:~/bcm1$ make
KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
make[1]: Entering directory `/usr/src/linux-'
  LD      /home/vbatts/bcm1/built-in.o
  CC [M]  /home/vbatts/bcm1/src/wl/sys/wl_linux.o
/home/vbatts/bcm1/src/wl/sys/wl_linux.c: In function 'wl_free':
/home/vbatts/bcm1/src/wl/sys/wl_linux.c:705: error: implicit declaration of function 'schedule'
make[2]: *** [/home/vbatts/bcm1/src/wl/sys/wl_linux.o] Error 1
make[1]: *** [_module_/home/vbatts/bcm1] Error 2
make[1]: Leaving directory `/usr/src/linux-'
make: *** [all] Error 2

then the following patch will just add include the needed headers to move you along in compiling your wl.ko module

cat ../hybrid_sta-2.3.32.patch | patch -p1

at which point you should be gravy to proceed as usual.

vbatts@current:~/bcm2$ make
KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
make[1]: Entering directory `/usr/src/linux-'
LD      /home/vbatts/bcm2/built-in.o
CC [M]  /home/vbatts/bcm2/src/wl/sys/wl_linux.o
CC [M]  /home/vbatts/bcm2/src/wl/sys/wl_iw.o
CC [M]  /home/vbatts/bcm2/src/shared/linux_osl.o
LD [M]  /home/vbatts/bcm2/wl.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: modpost: missing MODULE_LICENSE() in /home/vbatts/bcm2/wl.o
see include/linux/module.h for more information
CC      /home/vbatts/bcm2/wl.mod.o
LD [M]  /home/vbatts/bcm2/wl.ko
make[1]: Leaving directory `/usr/src/linux-'
vbatts@current:~/bcm2$ ls
Makefile  Module.symvers  built-in.o  lib/  modules.order  src/  wl.ko  wl.mod.c  wl.mod.o  wl.o
vbatts@current:~/bcm2$ sudo mv wl.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/
vbatts@current:~/bcm2$ sudo depmod -a
vbatts@current:~/bcm2$ sudo modprobe wl

and do not forget to `unset ARCH` before compiling 😉

Take care,