Broadcom BCM4318 mit WPA2

Die Konfiguration eines Broadcom BCM4318 (AirForce One 54g) WLAN-Chipsatzes kann eine mühsame und zeitintensive Angelegenheit werden. Daher hier eine hilfreiche Anleitung mit Tipps zur Konfiguration von WPA mit TKIP oder WPA2 mit AES (CCMP).

Ist man stolzer Besitzer eines z.B. HP Pavilion ze2000 Notebooks (Modell EH708EA#ABD), hat man normalerweise auch eine onboard WLAN-Karte, die vom Typ Broadcom Corporation BCM4318 (AirForce One 54g) ist. Nachfolgend können Sie sehen, wie Sie überprüfen, ob Sie einen solchen Chipsatz in Ihrem Laptop haben. Die auf dieser Seite beschriebenen Erfahrungen wurden mit einem Fedora 7 gemacht, dürften aber auf den meisten Linux-Distributionen mit entsprechend aktuellen Software-Versionen sehr ähnlich ausfallen.

tux:~ # lspci -vvv
[...]
05:02.0 Network controller: Broadcom Corporation BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller (rev 02)
        Subsystem: Hewlett-Packard Company MX6125
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Latency: 64
        Interrupt: pin A routed to IRQ 3
        Region 0: Memory at c0204000 (32-bit, non-prefetchable) [size=8K]
[...]
tux:~ #

Trotz viel Zeit, die ich investiert habe, habe ich die BCM4318 nicht mit den Kernel-Modulen "bcm43xx" oder "bcm43xx-mac80211" bzw. dem Nachfolger "b43" zum Laufen bekommen - selbst der Einsatz von "bcm43xx-fwcutter" war ergebnislos. Daher habe ich mich für den Weg über NDISwrapper entschieden und diesen wie folgt installiert (dazu muss allerdings das Repository Livna in yum eingebunden sein):

tux:~ # yum install -y ndiswrapper kmod-ndiswrapper

Als nächstes habe ich die nichtfunktionierenden Kernel-Module entladen, in die Blackliste aufgenommen und dafür das NDISwrapper-Modul eingebunden. Je nach dem, welche dieser Kernel-Module bei Ihnen geladen oder nicht geladen worden sind, erhalten Sie beim "rmmod" eventuell eine Fehlermeldung; diese können Sie ignorieren.

tux:~ # rmmod bcm43xx-mac80211 bcm43xx b43
tux:~ # 
tux:~ # echo "blacklist bcm43xx_mac80211" >> /etc/modprobe.d/blacklist
tux:~ # echo "blacklist bcm43xx" >> /etc/modprobe.d/blacklist
tux:~ # echo "blacklist b43" >> /etc/modprobe.d/blacklist
tux:~ # 
tux:~ # echo "alias wlan0 ndiswrapper" >> /etc/modprobe.conf
tux:~ # 

Sofern man die benötigten Windows-Treiber nicht hat, kann man sich diese in der Liste der unterstützten Karten heraussuchen, herunterladen und wie folgt auch installieren:

tux:~ # cd /tmp
tux:/tmp # wget -q http://biginoz.free.fr/linux/bcmwl5a.inf
tux:/tmp # wget -q http://biginoz.free.fr/linux/bcmwl5.sys
tux:/tmp # 
tux:/tmp # ndiswrapper -i /tmp/bcmwl5a.inf
installing bcmwl5a ...
forcing parameter IBSSGMode from 0 to 2
forcing parameter IBSSGMode from 0 to 2
tux:/tmp # 

Sofern man sein Laptop nicht neustarten möchte, damit die Änderungen aus der "/etc/modprobe.conf" aktiv werden, sollte man das Modul von Hand laden und im Systemlog prüfen, was sich verändert hat.

tux:~ # modprobe ndiswrapper
tux:~ # 
tux:~ # ndiswrapper -l
bcmwl5a : driver installed
tux:~ # 

Die Zeilen, die im Systemlog erscheinen, sehen ungefähr so aus:

Aug 23 23:26:13 tux kernel: wlan0: ethernet device xx:xx:xx:xx:xx:xx using NDIS driver: bcmwl5a, version: 0x3642e00, NDIS version: 0x501, vendor: 'NDIS Network Adapter', 14E4:4318.5.conf
Aug 23 23:26:13 tux kernel: wlan0: encryption modes supported: WEP; TKIP with WPA, WPA2, WPA2PSK; AES/CCMP with WPA, WPA2, WPA2PSK
Aug 23 23:26:13 tux kernel: usbcore: registered new interface driver ndiswrapper

Jetzt gibt es zwei Möglichkeiten: Sie verwenden den NetworkManager z.B. in Verbindung mit einem Werkzeug aus KDE oder GNOME; beispielsweise mit dem KNetworkManager. Da es hierbei keinerlei große Herausforderung gibt, gehe ich auf diese Möglichkeit nicht weiter ein. Ich möchte allerdings hinzufügen, dass zum Zeitpunkt meiner WLAN-Einrichtung der KNetworkManager sehr unstabil war und öfters abgestürzt ist. Zudem war ich darüber nicht in der Lage, WPA2 mit AES (CCMP) zu konfigurieren, lediglich WPA mit TKIP oder eine unverschlüsselte Verbindung waren möglich.

Die andere Möglichkeit ist die Einrichtung ohne NetworkManager, die statischer und vielleicht auch etwas unflexibler ist. Hierfür ist die Installation von "wpa_supplicant" erforderlich:

tux:~ # yum install -c wpa_supplicant

Möchte man WPA mit TKIP einrichten, sieht die Konfigurationdatei "/etc/wpa_supplicant/wpa_supplicant.conf" folgendermaßen aus:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
eapol_version=1
ap_scan=0
fast_reauth=0

network={
        scan_ssid=0
        ssid="[...]"
        key_mgmt=WPA-PSK
        proto=WPA
        pairwise=TKIP
        group=TKIP
        psk="[...]"
        priority=2
}

Die SSID und der Pre-Shared Key (PSK) müssen natürlich angepasst werden. Ist WPA2 mit AES (CCMP) gewünscht, braucht man eine seltsame Konfiguration: Man muss sowohl WPA mit TKIP als auch WPA2 mit AES (CCMP) in die Konfigurationsdatei eintragen. Konfiguriert man in "/etc/wpa_supplicant/wpa_supplicant.conf" ausschließlich WPA2 mit AES (CCMP), so funktioniert dies nicht, während sich ein Microsoft Windows XP mit Service Pack 2 ausschließlich mit WPA2-PSK und AES mit dem Access Point verbinden kann (was man auch erwartet). Das heißt, es ist kein Problem des Access Points, sondern eines von "wpa_supplicant".

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
eapol_version=1
ap_scan=0
fast_reauth=0

network={
        scan_ssid=0
        ssid="[...]"
        key_mgmt=WPA-PSK
        proto=WPA2 WPA
        pairwise=CCMP TKIP
        group=CCMP TKIP
        psk="[...]"
        priority=2
}

In jedem Fall ist es sehr wichtig, dass SSID-Broadcasting auf dem Access Point aktiviert ist, andernfalls wird dieser nicht gefunden. Da es sich hierbei um keine Sicherheitseinstellung handelt, kann man diese relativ bedenkenlos aktivieren. Auf vielen Access Points heißt diese Option "SSID verbergen" oder ähnlich, d.h. man muss diese deaktivieren, damit SSID-Broadcasting aktiv ist.

Die Datei "/etc/sysconfig/wpa_supplicant" sollte wie folgend aussehen. In einer aktuellen Version von NDISwrapper kann "-Dndiswrapper" nicht mehr verwendet werden, sondern muss wie in meinem Fall auch durch "-Dwext" ersetzt werden.

# wlan0 and wifi0
# INTERFACES="-iwlan0 -iwifi0"
INTERFACES="-iwlan0"
# ndiswrapper and prism
# DRIVERS="-Dndiswrapper -Dprism"
DRIVERS="-Dwext"

Gibt es mit "wpa_supplicant" Probleme, klappt die Anmeldung am Access Point nicht, so hilft nachfolgender Befehl bei der Fehlersuche oftmals weiter:

tux:~ # wpa_supplicant -dd -K -t -iwlan0 -Dwext -c /etc/wpa_supplicant.conf

Eigentlich ist die Konfiguration hiermit abgeschlossen, hat alles geklappt. Jedoch ich nach dem ersten Neustart die Situation, dass die Anmeldung am Access Point erfolgreich war, ich aber keine IP-Verbindung aufbauen konnte. Daher musste ich die Datei "/etc/rc.local" um folgende Zeilen erweitern:

/etc/init.d/network restart
sleep 5
/etc/init.d/network restart
sleep 5

# Wenn NTPd verwendet wird
/etc/init.d/ntpd restart

Wichtig ist, dass die "sleep"-Zeilen erhalten bleiben, sonst braucht man unter Umständen weitere Neustarts des Netzwerks. Ich konnte selbst mit einer längeren Wartezeit keinen zeiten Neustart des Netzwerks vermeiden, das scheint mir etwas obskur - doch es funktioniert anschließend einwandfrei. Und da der NTP-Daemon mit Neustarts des Netzwerks nicht immer umgehen kann, sollte dieser - sofern verwendet - auch einfach mit neugestartet werden.

Meine persönliche Meinung zu diesem Thema: Die Einrichtung von verschlüsseltem WLAN war unter Microsoft Windows XP mit Service Pack 2 wesentlich schneller, einfacher und problemloser erledigt, sofern man WPA2 mit AES (CCMP) verwendet. Und WPA mit TKIP lässt sich unter Microsoft Windows XP und unter Linux (mit dem NetworkManager) ungefähr gleich schnell einrichten.