W-Lan PCMCIA-Karten mit Prism-Chip
Einrichten des Linuxtreibers für die W-LAN PCMCIA-Karte SMC2835W.
Vorwort
Die SMC2835W-Karte ist noch relativ neu auf dem Markt und besitzt den PrismGT-Chipsatz. Der Hersteller SMC verweist bei der Linux-Unterstützung auf das Prism54 Projekt, welches einen Kernelpatch sowie die nötige Firmware bereit stellt. Leider war ich nicht in der Lage, diesen Patch einzusetzen. In dem Forum des Projektes fand ich allerdings einen Patch, der hervorragend funktioniert. Eine Liste der unterstützten Karten ist hier zu finden: http://ruslug.rutgers.edu/%7emcgrof/802.11g/Documentation/supported_cards.php
Dieses Dokument ist als Erfolgsbericht zu lesen, wie es bei mir geklappt hat. Support kann ich aus zeitlichen Gründen leider nicht geben, über Feedback würde ich mich aber trotzdem freuen.
Anforderungen
Ihr solltet schon Erfahrung im Bauen von Kerneln haben. make config
, make bzImage
, make modules
usw. und der Umgang mit LILO oder GRUB sollte nicht fremd sein.
Download
Folgende Archive benötigt ihr:
- Kernel 2.4.22
- Treiber aus dem Prism54-Projekt
- Firmware aus dem Prism54-Projekt
- Kernelpatch für Prism GT, Prism Duette, und Prism Indigo Chipsätze
Hinweis: Dieser Patch ist aus dem Prism54-Projekt hervorgegangen. Nur mit diesem Patch konnte ich die Karte in Betrieb nehmen.
Vorbereitung
Ich gehe im Folgenden davon aus, daß alle o.g. Dateien im aktuellen Verzeichnis liegen.
Den Kernel entpacken. Im aktuellen Verzeichnis haben wir nun ein neues Verzeichnis linux-2.4.22, welches die Sourcen des Kernels enthält.
tar xvjf linux-2.4.22.tar.bz2
Nun entpacken wir die Treiber
tar xvzf ISL3890-0.1.0.tar.gz
Die Firmware kopieren wir nach /etc/hotplug. Dies ist wichtig, da man ohne die Firmware-Datei schnell in eine Kernel Panic rennt.
cp /etc/hotplug/isl3890.arm
Zuletzt entpacken wir den eigentlichen Patch:
bzip2 -d isl3890-2.4.22.patch.bz2
Patchen und Compilieren des Kernels
Wir wechseln nun in das Verzeichnis mit den Linux-Quellen.
cd linux-2.4.22
und patchen den Kernel mit folgendem Kommando:
patch -p1 < ../isl3890-2.4.22.patch
Nun sind alle erforderlichen Optionen für die Konfiguration vorhanden. Verschiebt nun das komplette Verzeichnis linux-2.4.22 nach /usr/src und setzt den Link linux auf den gepatchten Kernel.
Konfiguriert den Kernel (ich habe die Datei .config aus dem alten Kernel mit rüber genommen) und wählt unter
den Treiber für PrismGT an. Ebenfalls auf Yes setzen: WIRELESS_IOCTLS, INTERSIL_EVENTS und WDS_LINKS.Nun Kernel compilieren, Module bauen und installieren. Anschließend den neuen Kernel booten.
Ist alles gut gegangen und habt ihr einen lauffähigen Kernel 2.4.22, könnt ihr mittels modprobe islpci_pci
das Modul für die Karte laden.
Notwendige Tools bauen
Als nächstes müssen wir die Tools setoid und getoid aus dem Treiber des Prism54-Projektes bauen.
Achtung: Dieser Teil ist Theorie! Bei mir waren diese Tools schon durch einen vorhergegangenen Compiler-Lauf mit deaktiviertem PCMCIA im Kernel, so wie es in der Dokumentation der Treiber des Prism54-Projektes beschreiben ist. Wenn es nicht wie folgt beschrieben funktioniert, solltet ihr euch einen zweiten Kernel auf Basis des 2.4.22 mit abgeschaltetem PCMCIA bauen (die Treiber lassen sich sonst nicht bauen) und die Treiber dann compilieren.
Ihr könnt auch das Archiv von mir verwenden. Dort sind bereits die compilierten Tools enthalten. Achtung: Ich übernehme keine Garantie für evtl. entstehende Schäden! Use at your own risk!
Wenn ihr selber compilieren wollt: Wechselt in das Verzeichnis der Treiber ISL3890-0.1.0 und anschließend ins Unterverzeichnis pcmcia-cs-3.2.4-intersil/debug-tools/intersil. Versucht dort mittels make
die drei Tools setoid, getoid und catchoids zu bauen.
In jedem Fall sollten diese drei Tools schließlich unter /usr/local/bin oder einem Verzeichnis eures Vertrauens (Pfades) liegen.
Konfiguration
Da ich das W-Lan nicht ständig laufen lassen möchte, habe ich mir ein paar Dreizeiler geschrieben, mit denen ich das W-Lan je nach Bedarf hoch und runter fahren kann:
wlan-dhcp
#!/bin/bash # # Usage: wlan-dhcp # insmod islpci_pci setoid eth1 10000002 ssid $1 /sbin/ifup-dhcp hotplug eth1
wlan-static
#!/bin/bash # # Usage: wlan-static # wlan-static myHOME 192.168.0.2 # insmod islpci_pci setoid eth1 10000002 ssid $1 ifconfig eth1 $2 netmask 255.255.255.0 up
wlan-down
#!/bin/bash ifconfig eth1 down rmmod islpci_pci
WEP-Verschlüsselung
Die Treiber unterstützen auch 128-Bit-Verschlüsselung. In meinem Router (D-Link DI-624) habe ich dazu
eingestellt, Encryption enabled und vier Keys (HEX, 26 Buchstaben/Ziffern zwischen 0-9 und A-F) gesetzt. Diese Keys unbedingt gut notieren, bevor ihr diese aktiviert!Ein kleines Skript erledigt dann das Setzen der Verschlüsselung. Alternativ können die Zeilen auch in die oben genannten Skripte eingefügt werden:
Als erstes setzen wir die vier Keys, die bereits in der Router-Konfiguration eingetragen wurden. Bitte vergesst nicht, 0x
davor zu setzen. Im Folgenden habe ich die Schlüssel nur mit a, b, c und d gefüllt. Ihr solltet schon sinnvollere Kombinationen wählen ;-)
# Setting Keys setoid eth1 12000004 key 0 0xdddddddddddddddddddddddddd setoid eth1 12000005 key 0 0xaaaaaaaaaaaaaaaaaaaaaaaaaa setoid eth1 12000006 key 0 0xbbbbbbbbbbbbbbbbbbbbbbbbbb setoid eth1 12000007 key 0 0xcccccccccccccccccccccccccc
Als nächstes aktivieren wir die Verschlüsselung:
# Set authentication setoid eth1 12000000 long 3
Nun folgen zwei Werte, die ich noch nicht ganz verstanden habe, die aber anscheinend nötig sind:
# Setting PRIVACYINVOKED and EXUNENCRYPTED setoid eth1 12000001 long 1 setoid eth1 12000002 long 1
Zu guter Letzt den aktiven Schlüssel setzen:
# Setting KEYID setoid eth1 12000003 long 0
Nun ist der erste Schlüssel aktiv (in diesem Fall 0xdddddddddddddddddddddddddd). Nach einem Durchstarten von eth1 sollte die Verschlüsselung aktiv sein. tcpdump -i eth1 -w tcpdump.out
sollte euch davon überzeugen.
Nachwort
Bitte habt Verständnis dafür, daß ich für diesen Weg keinen Support liefern kann. Betrachtet diese Anleitung als Hilfestellung, um zum Ziel zu kommen. Für generellen Support wendet euch bitte an das Forum des Prism54-Projektes. Dieses Dokument hat keinen Anspruch auf Vollständigkeit.