Broadcom BCM4312
From ArchWiki
i18n |
---|
English |
简体中文 |
Contents |
Introduction
Finally Broadcom has released a linux driver for most of its wireless chipsets. See the Ubuntu forums and the Debian forums. It seems to work with all modern 43xx Broadcom cards. Up until recently the only way to get some of these working, such as 4328, was via ndiswrapper. Broadcom chipsets are used in most Dell laptops, among others.
Unfortunately, the driver does not work with hidden ESSID's.
Determine whether you actually have one of these cards
Here is a list of cards which work with this driver,
14e4:432b "Broadcom Corporation BCM4322 802.11a/b/g/n Wireless LAN Controller" 14e4:4329 "Broadcom Corporation BCM43XG" 14e4:4328 "Broadcom Corporation BCM4328 802.11a/b/g/n" 14e4:4315 "Broadcom Corporation BCM4312 802.11b/g" 14e4:4313 "Broadcom Corporation BCM4310 Ethernet Controller" 14e4:4312 "Broadcom Corporation BCM4312 802.11a/b/g" 14e4:4311 "Broadcom Corporation BCM4311 802.11b/g WLAN" 14e4:432d 14e4:432c 14e4:432a
Type in console (mind the letter case)
lspci | grep BCM43
If you have some other Broadcom model you might try the b43 driver.
Driver installation
Get the driver
There's a PKGBUILD in AUR. Or, you can download the driver from here, where you will also find a README file.
Load the kernel module
Before loading the module, remove 'b43, or any other module you are using for your wireless card:
# rmmod b43
Load the module:
# modprobe lib80211_crypt_tkip # modprobe wl # insmod /lib/modules/2.6.30-ARCH/kernel/drivers/net/wireless/wl.ko
You might also need to generate modules.dep and map file again by:
# depmod -a
Now you can make the change permanent by including lib80211_crypt_tkip in your MODULES array in /etc/rc.conf.
MODULES=(lib80211_crypt_tkip, ...
Or if you installed module via AUR package you just need:
# rmmod b43 # (or any other module you are using for your wireless card) # modprobe wl
Now in iwconfig you should see a wireless device (for example eth1). You might need to restart your computer to see the device in iwconfig.
To make the module load at boot just add in rc.conf:
MODULES=(lib80211_crypt_tkip wl !b43 !ssb ...
By blacklisting the 'b43' and 'ssb' modules, you will prevent the kernel from autoloading them instead of the desired modules.
Note on using multiple Broadcom kernel modules
In my Dell Inspiron Laptop, i have a Broadcom BCM4401 Ethernet card and a Broadcom BCM4328 Wireless card. If I just remove b43, I can load the wl driver, but no wireless card shows up. However, if i first remove the b44 (and ssb) driver for my ethernet card, and then load the wl driver, I get a wireless eth0. Afterwards, I can load b44 again, to have an ethernet eth1.
Short version:
- Put "lib80211_crypt_tkip" and "wl" at the BEFORE b44 (if you have it) position in MODULES= in /etc/rc.conf
- Don't forget to blacklist b43
- Your wireless card will be eth0
- Your ethernet card will be eth1
- Both will work fine
Troubleshooting
Interfaces swapped every time
This is a common problem with this driver. And the next process works for me with the BCM4312 following the udev post:
Create a file called /etc/udev/rules.d/10-network.rules
and bind the MAC address of each of your cards to a certain interface name
SUBSYSTEM=="net", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="eth0" SUBSYSTEM=="net", ATTR{address}=="ff:ee:dd:cc:bb:aa", NAME="eth1"
Where:
- NAME="eth0" is the name of the interface that you want, for example the same name "eth0". You can use other names, for example "lan0" for eth0 or "wlan0" for eth1.
- To get the MAC address of each card, use this command:
udevadm info -a -p /sys/class/net/<yourdevice> | grep address
But first you need know if eth0 isn't eth1 or vice versa, you can perform a scan: iwlist scan
So if eth0 is really eth1 then the MAC of eth1 is that of eth0.
Don't forget to update your /etc/rc.conf and other configfiles using the old ethX notation!
Module wl not works after kernel upgrade
This is because the driver is compiled with the current kernel, you need recompile the driver with the new kernel, for the module to function properly.
Device not showing up
Be sure of trying "ifconfig -a", "ifconfig" only sometimes doesn't show all network interfaces.
Here is one short script that helped me out, because I was loading modules incorrectly:
#!/bin/bash rmmod b43 ssb wl lib80211_crypt_tkip lib80211 modprobe lib80211_crypt_tkip modprobe wl depmod -a
This helped me when sometimes I couldn't get the interface to show up. Else, I recommend adding the modules at rc.conf:
MODULES=([...] !b43 !ssb !lib80211 lib80211_crypt_tkip wl)
Worked for me in a Dell Latitude 2100 with Broadom BCM5764M (eth) and BCM4312 (wifi).