Getting bcm43xx cards work under Fedora

I have an HP Pavilion DV6000 laptop which has a dual 64 bit AMD CPU. It's running on Fedora 7, after an upgrade from Fedora Core 6.

I am going to summarize the steps in getting your network card working in Fedora, if you have a card with a Broadcom chipset.

You can see by typing

 lsmod | grep BCM

if you have a Broadcom wifi card or not. 

In summary, I found it more stable to use Ndiswrapper for wifi functionality in Fedora than using directly the firmware. I will explain both methods.

wireless cards

Because of the popularity of Broadcom network adapters among laptop manufacturers and the nonexistence of open source Linux drivers for these cards, Linux developers started a project on writing drivers for bcm43xx chip-based wifi cards.  Recently a special Linux driver was developed, but it still uses some vital specifications contained in Windows drivers.

If you want to try this "firmware-way" of giving life to your wifi card, first you need to install bcm43xx-fwcutter:

yum install bcm43xx-fwcutter

Then go to the directory containing your Windows XP driver files. If you only have a single Windows executable file but not a list of extracted files, then you need to extract your files first. In Linux, you can use the "cabextract" utility for this :

cabextract YourFile.exe

(Don't have cabextract? You know how to get it! 😉 Or perhaps, you think "while it's already on my Windows partition, why should I bother download the driver and extract files etc.". In that case, yes you can try using those files by accessing your Windows partition from within your Linux system, if the Windows file system is of FAT32 type or NTFS if you have already installed "ntfs-3g".)

Locate the ".sys" file in that directory then run the command (as root, or by sudo'ing):

bcm43xx-fwcutter -w /lib/firmware/ YourFile.sys

which will write the corresponding ".fw" files in your target directory.

Once you are finished with this step, load the bcm43xxx_mac80211 into memory by typing:

modprobe bcm43xxx_mac80211

then "depmod -a" and "dmesg" to see if everything went fine…

Now you can run your "Network configuration" utility to add and activate your new wireless connection. Or simply, from the command line (assuming your new interface's name is "wlan0") :

iwlist wlan0 scanning

which will show you the available networks. Then,

ifconfig wlan0 up

dhclient wlan0

You should be connected now, if everything went fine.

If your connection is stable and you are not having any sort of connection problems, then it's time to change your network scripts so that you can automatically connect every time you boot your computer.

Open and edit (as root again) /etc/modprobe.conf. And add an alias line anywhere in the file such as this one:

alias wlan0 bcm43xxx_mac80211

You may need to replace wlan0 with eth1 etc. depending on how your wifi is aliased before.

An alternative approach is to use ndiswrapper. Ndiswrapper has been around for some years now, and it's quite popular. It basically allows the use of Windows wifi drivers under Linux. In order to function properly, it normally requires a kernel compiled with at least 8KB of stack size, but the current Fedora systems have a kernel module which works with ndiswrapper, avoiding the requirement to re-build the kernel to have an 8 KB of additional stack.

Once again you need to have your driver files extracted in a single directory.

Unless you want to manually download ndiswrapper and its kernel module, or install by compiling the source code, Fedora's smart package manager yum (or yumex, if you are not a big command line fan) would do this for you, just type:

yum install ndiswrapper

This time, we will be looking for an "inf" file, rather than a "sys":

ndiswrapper -i DriverFile.inf

To see if it was successfully installed, type:

ndiswrapper -l

You should see your driver name listed. Otherwise, "Houston, we've got a problem."

modprobe ndiswrapper

depmod -a

and

ifup wlan0

should be enough to get a connection from an unrestricted network with no encryption.

If you have more than one wifi network and want to connect to a specific one, then you can specify this by editing the settings of your wireless connection. Open System – > Administration -> Network and edit the configuration.

Alternatively, use this command to temporarily set your network name:

iwconfig wlan0 essid "NAME_OF_THE_NETWORK"

See the usage example of "iwlist" above, to see how you can get a list of the names of networks in range.

If you want to permanently stick to a single network name, you can 'hardcode' this by editing the network script:

/etc/sysconfig/network-scripts/ifcfg-wlan0

Just add the name of your network next to "ESSID".

I hope this will be of some help.  Let me know if you encounter any problem.