Tuesday, May 31, 2011

Enabling the brcm80211 driver in Fedora 15

[Update: As pointed out by Dean Brettle and, subsequently, by AM in the comments, rpmfusion added the kmod-staging package. The steps below may be useful if I ever need to compile a single module again.]

The driver for the wireless on the Lenovo S10-3 is included in the staging directory of the kernel. Fedora 15, unfortunately, did not enable it and wl.kmod or brcm80211.kmod were not available from rpmfusion repository either.

So, the best option was to download the source and enable it. The instructions to download the source of the kernel and prepare the source tree were available at http://fedoraproject.org/wiki/Docs/CustomKernel. The kernel source was now in the rpmbuild/BUILD/kernel-2.6.38.fc15/ directory.

The following steps helped to build only the desired module
  1. Modify the .config file to include
    CONFIG_BRCM80211=m
  2. Make sure that the following details in Makefile are as per the running kernel, e.g.
    VERSION = 2
    PATCHLEVEL = 6
    SUBLEVEL = 38
    EXTRAVERSION = .6-27.fc15.x86_64
  3. Run the command
    $ make drivers/staging/brcm80211
    This step prompted me to enable the additional option -
    CONFIG_BRCM80211_PCI=y
  4. $ make M=drivers/staging/brcm80211/
  5. $ sudo make modules_install M=drivers/staging/brcm80211/
  6. Looking at the OpenSuse's /lib/firmware/brcm, I created two softlinks:
    $ sudo ln -s bcm43xx-0-610-809-0.fw bcm43xx-0.fw
    $ sudo ln -s bcm43xx_hdr-0-610-809-0.fw bcm43xx_hdr-0.fw
  7. Add the driver:
    $ sudo modprobe brcm80211
The wifi card was now recognised and working. It took just a few minutes instead of hours for compiling the full kernel - even if it took a few days to understand and reach this point!

Notes:

  • If step 2 was not done, modprobe failed to load brcm80211 - invalid module format. The log reported a more meaningful problem - version magic mismatch and the driver was unloaded.

  • If step 6 was not done, the driver was loaded but the log reported an error that failed to find firmware /lib/firmware/brcm/bcm43xx-0.fw.




6 comments:

  1. Thanks for the post! It got me 95% of the way there. I just needed to add step 3.5:

    $ make modules_prepare

    and replace steps 5-7 with:

    $ su
    # mkdir /lib/modules/`uname -r`/kernel/drivers/staging/brcm80211
    # cp drivers/staging/brcm80211 /lib/modules/`uname -r`/kernel/drivers/staging/brcm80211
    # depmod -a
    # yum update linux-firmware
    # modprobe brcm80211

    ReplyDelete
  2. Actually, it looks like just installing the kmod-staging package from RPM Fusion is now sufficient.

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. Here is a better solution for Googlers:
    Install kernel-staging
    Install bcm43xx-fwcutter
    blacklist "wl" in case you have installed it

    BAM !

    ReplyDelete