Mittwoch, 18. November 2009

D-Link 120e unter Debian HOWTO

Vor einiger Zeit habe ich einen HowTo für die Installation eines DWL-120e USB WLan Adapters unter Linux/Debian geschrieben; hier ist es.





Letzte Änderung: 07.2007 – Version: 0.1.1

0. Copyright und Disclaimer
1. Einleitung
2. Voraussetzungen
3. Installation
3.1. AtmelWLanDriver
3.2. BerliOS-Driver
3.3. WLanNG Driver
4. Konfiguration
5. DWL-120e in der Praxis: das W-LAN der Universität Bielefeld
5.1. Adapter Konfiguration
5.2. Netzwerkanmeldung mir VPN (Cisco)
6. Probleme und Einschränkungen
6.1. Allgemeine Probleme
6.2. Probleme bei der Verwendung von AtmelWLanDriver
6.3. Probleme bei der Verwendung von BerliOS-Driver
6.4. Probleme bei der Verwendung von WLanNG Driver
6.5. Einschränkungen
7. Quellen / Links

0. Copyright und Disclaimer

Für den Inhalt dieses Dokuments kann keine Haftung übernommen werden. Die Ausführung, Beispiele und der restliche Inhalt werden auf eigene Gefahr benutzt.
Dieses Dokument ist urheberrechtlich geschützt. Das Copyright (c) für dieses HOWTO liegt bei Juan-Pablo Saenz. Das Dokument darf gemäss der Creative Commons (”BY-SA”) License verbreitet werden. Insbesondere bedeudet dieses, dass der Text sowohl über elektronische wie auch physikalische Medien ohne die Zahlung von Lizenzgebühren verbreitet werden darf, solange der Autor genannt wird und die Weitergabe einer etwaigen Bearbeitung unter denselben Lizenzbedingungen stattfindet. Näheres dazu findet Sie unter http://creativecommons.org/licenses/by-sa/3.0/deed.de
Die neueste Version dieses Dokuments liegt auf www.jupixweb.de
Feedback und Vorschläge zur Verbesserung dieses Dokuments sind erwünscht.

1. Einleitung

Als ich vor zwei Wochen den USB-WLan Adapter D-Link 120e von der Uni-Bibliothek [1] zur Verfügung gestellt bekam, war ich zuerst sehr froh, (schliesslich hatte ich über vier Wochen darauf gewartet!) – nach Studium der mitgelieferten, hausinternen Installationsanleitung, war ich aber etwas entäuscht. Dort steht auf Seite 2: “Wichtige Hinweise zur Installation: Der D-Link WLAN USB-Adapter ist nur funktionsfähig unter Windows (Win98, ME, Win200, XP)”. Mein Besuch beim HRZ war auch nicht von Erfolg gekrönt: eine Benutzung des Adapters unter Linux sei nicht getestet und eventuell auch gar nicht möglich. Ich wollte nicht so schnell aufgeben, also habe ich mich etwas mit dem Thema beschäftigt und schliesslich den Adapter doch zum Laufen bekommen.

Mein System:
* HARDWARE: Notebook: Thinkpad 570
* CPU: Mobile PII / 366 Mhz.
* RAM: 128 MB SoDIMM-RAM
* HDD: IBM 5.1 GB
* USB Port: v1.0 / 12Mbits
* SOFTWARE: OS: GNU/Debian Linux, v3.11 (Codename Woody)
* Kernel: 2.4.18-bf2.4
* Graphische Engine: X-11 + KDE 2.2
Dieses Dokument stellt drei verschiedenen Treiber vor; es versteht sich von selbst, dass nur einer davon installiert und benutzt werden sollte.

2. Voraussetzungen
  • Vor der Installation: die USB Unterstützung muss im Kernel einkompiliert, die Module geladen sein (usb.c und usb-uhci.o oder usb-ohci.o)
  • die Kernel-Headers müssen unter /usr/src/linux liegen. Ob sie dort tatsächlich zu finden sind, oder ein Link für die nötige Verbindung sorgt, ist gleichgültig. (Einen symbolischen Link kann man mit #ln -s /path/to/kernelheaders /usr/src/linux anlegen.)
  • Während der Installation: Man muss für den Installationsvorgang als Superuser (root) angemeldet sein.
  • Nach der Installation: Für die Konfiguration des Adapters braucht man das Paket wireless-tools
  • Darüber hinaus ist das Programm kismet sehr nützlich, das nach aktiven Access-Points sucht und diese identifiziert.
  • Ein DHCP-Client muss für die Verbindung mit dem Access-Point installiert sein. (Ist normalerweise vorinstalliert, man kann es mit “#man dhclient” überprüfen)
Ich setzte an dieser Stelle voraus, dass man mit der Konsole vetraut ist, dass die nötigen Entwickler-Werkzeuge (make, etc.) installiert sind und dass man sie einigermassen beherrscht. Jedoch ist das Ganze nicht sonderlich schwierig, auch wer kein Linux-Experte ist kann einige Manpages lesen und verstehen. Mehr braucht man dafür nicht; wer Zeit und Lesebereitschaft mitbringt kann sogar etwas Spaß daran finden.

3. Installation

Zuerst gilt es, den verwendeten Chipsatzt des Gerätes zu betimmen. Hierfür ist die offizielle D-Link Web-Seite [2] auch keine grosse Hilfe; Google [3] ist aber hier auch mein Freund und leitet mich weiter zu einer wirklich ausführlichen Liste [4], auf der u.a. diese Information steht: der USB-Adapter DWL-120 benutzt den Chip at76c503a. (Im Notfall kann man das Gehäuse des Gerätes aufschrauben und nachschauen, aber nur wenn der Adapter einem gehört! :-) )
Also habe ich mich ins Netz nach dem passenden Treiber umgesehen (D-Link selbst bietet keinen Linux Treiber an!) und bin fündig geworden. Für den in dem D-Link Adapter verwendeten Chipsatz at76c503 gibt es drei GPL Treiber,
  1. den atmelwlandriver [5], entwickelt von Sourceforge-Mitgliedern [6] und
  2. den BerliOS-Driver [7], entwickelt von Mitgliedern der Berlios-Gruppe [8]. Zusätzlich kann man auch mit
  3. dem WLan-NG Treiber [9] von AbsoluteValue Systems experimentieren, wenn man will.
3.1. Atmelwlandriver (sourceforge)

Das ist wohl der “bekannteste” Treiber, wenn man hier von “bekannt” sprechen darf. Zur Zeit ist die neuste Version die 2.1.2.2. und ist von Dezember 2002. Es gibt jedoch neuere Entwicklerversionen (es kommen ständig neue hinzu, die neuste stammt vom 23.09.2003) und eine grosse Anzahl an Patches. Auch der Support ist sehr gut, auf der Projektseiten läuft ein Forum und eine eigene Mailing-List. Auf dem Server befindet sich auch ein sehr gutes HowTo [10] für die Installation der Treiber unter RedHat8.
Hat man sich für eine Version entschieden und sie heruntergeladen, hat man zunächst ein gepacktes .tar.gz (oder gff. .tar.bz2) Archiv auf der Platte. Dieses entpackt man wie gewohnt mit “# tar -xfz archivname.tar.gz”. Danach müsste das Verzeichnis /atmelwlandriver auf der Festplatte zu finden sein.
Bevor man mit dem eigentlichen Kompilieren des Treibers anfängt, muss man noch den D-Link USB-Adapter in den Konfigurationsdatei eintragen, damit der Treiber den Adapter später erkennt und ansprechen kann. Dafür braucht man die im Gerät gespeicherten Werte VENDOR_ID und PRODUCT_ID, mit denen es sich im System anmeldet, sobald es angeschlossen wird. Diese Werte findet man mit jeder USB-Erkennungssoftware heraus; der Adapter wird z.B. im KDE Control-Center als “Unknow Device”, mit “Vendor ID=0×2001″ und “Product ID=3200″ deklariert. Also fügt man nun folgende Zeile in /atmelwlandriver/src/includes/usb/config.h unter dem Punkt “#define RFMD_DEVICES” ein:
{USB_DEVICE (0x2001,0x3200)}, /* D-Link DWL120e */ \
Somit ist die Vorkonfiguration abgeschlossen. Danach startet man die Konfiguration des Treibers mit “#make config”. Dabei ist zu beachten, dass nur die für den DWL-120e nötigen Drivers zu installieren sind:

—————————————————-
# make config
Build all [y/N] : n
Set extra module version information [y/N] : n
Build Debug version [y/N] : n
Build USB Drivers [y/N] : y
Build USB 503A RFMD Driver [y/N] : y
Build USB RFMD 505 Driver [y/N] : n
Build USB RFMD 505 + 2958 Driver [y/N] : n
Build PCMCIA Drivers [y/N] : n
Build miniPCI Driver [y/N] : n
Build applications [y/N] : n
Kernel Version Running 2.4.18-bf2.4
Found Kernel Source Directory ()
Finished. Now run make clean, all, install

—————————————————-

Somit ist die Konfiguration abgeschlossen. Danach kompiliert man die Module mit “# make all; make install” Wenn alles gut gelaufen ist, findet man nun das installierte Modul usbvnetr.o unter /lib/modules/KERNEL_VERSION/kernel/drivers/usb. Nun kann man mit “#modprobe usbvnetr” das Modul laden, den Adapter anschliessen und überprüfen, ob das Gerät korrekt erkannt und gestartet wird. (In den SysLog nachschauen oder sich mit “#dmesg” die Meldungen anzeigen lassen.) Man kann das Modul natürlich auch in den Kernel eintragen, dann wird es bei jedem Rechnerstart mitgeladen. Dafür kann man z.B. modconf verwenden.

3.2. BerliOS-Driver

Das ist ein anderer Treiber für das DWL-120e, welchen z.T. einfacher zu konfigurieren ist. Das letzte relase trägt die Versionsnr. 0.10, ich habe jedoch bei mir die noch in Entwicklung befindliche Version 0.11beta4 verwendet, da bei dieser Version einige Bugs bereits behoben worden sein sollen. Man lädt die ausgewählte Version herunter und bekommt traditionellerweise ein gepaktes Archiv. Die Konfiguration ist denkbar einfach: da der DWL-120e Adapter bereits in der Kofigurationsdatei “/at76c503a/at76c503-rfmd.c” eingetragen ist, hat man nicht allzu viel zu tun: “#make; make install” sollte die Module kreieren und im Module-Verzeichnis /lib/modules/KERNEL_VERSION/kernel/drivers/usb ablegen. Nach erfolgreicher Installation lädt man die Module mit “#modprobe -v at76c503-rfmd” (Es sind drei: at76c503, at76c503-rfmd und usbdfu. Mit dem o.g. Befehl werden die Anhängigkeiten automatisch überprüft und alle drei geladen.) Auch hier kann man sie für immer an den Kernel binden, mit z.B. “#modconf
Nach dem Laden der Module, den Adapter anschliessen und überprüfen, ob das Gerät korrekt erkannt und gestartet wird. (In den SysLog nachschauen oder sich mit “#dmesg” die Meldungen anzeigen lassen.)

3.3. WLan-NG Driver (AbsoluteValue Systems)

(noch) Nicht getestet.

4. Konfiguration

1. Um den Adapter zu aktivieren, braucht man das Programm iwconfig, welches analog zu ifconfig arbeitet. Es ist Teil des Paketes wireless tools. Wichtige Parameter sind essid, channel, mode. Da der Adapter die Kennung wlan[n] (bei ältere Treiber-Versionen auch eth[n]) zugewiesen bekommt, genügt ein einfaches “#iwconfig wlan[n]” um das Gerät zu aktivieren. Braucht man spezielle Netzwerk-Einstellungen, kann man sie mit z.B. “#iwconfig wlan0 essid “MyNetwork”, channel 13, mode managed” eintragen. (Ein Blick in den entsprechenden Manpages kann auch hier nicht schaden!)
2. das Program Kismet ausführen und gucken, ob und welche Netze gefunden wurden. (”#kismet -i wlan[n]“)
3. Mit einem DHCP-Client kann man sich nun in ein bestehendes Netz begeben, z.B. mit “#dhclient wlan0″ (oder auch nicht, wenn feste IP’s zugewiesen worden sind)
4. Nun kann man mit ifconfig überprüfen, ob sich der Rechner erfolgreich am Netz angemeldet hat.

5. DWL-120e in der Praxis: das W-LAN der Universität Bielefeld

Ist das Treiber-Modul geladen und das Gerät korrekt erkannt worden, muss man zunächst den Adapter für die Teilnahme an der WLan der Uni-Bi konfigurieren. Auf der Homepage des HRZ befindet sich eine sehr gute, ausführliche Anleitung [11], auf der die wichtigsten Parameter zu finden sind.

5.1. Adapter Konfiguration

1. Man aktiviert wlan[n] mit den Parametern essid=unibi, channel=13, mode=managed und nickname=benutzername: “#iwconfig wlan0 essid “unibi”, channel 13, mode managed, nickname “benutzername”
2. Nun ruft man Kismet auf, um nach Verfügbaren Netzen zu suchen: “#kismet -i wlan[n]”
3. Jetzt Kismet wieder beenden, und dhclient starten, um sich im Netz anzumelden: “#dhclient wlan[n]”
4. Mit ifconfig kann man jetzt überprüfen, ob alles geklappt hat. Ist das der Fall, muss nun dort wlan[n] mit der zugewiesenen IP-Nummer 176.16.x.x auftauchen.

5.2. Netzwerkanmeldung mit VPN (Cisco)

Sollte der VPN-Client noch nicht installiert sein, ist jetzt der Augenblick gekommen, dies nachzuholen. Für die Authentifizierung bzw. Verschlüsselung der Daten an der WLan der Uni Bielefeld ist es zwingend notwendig, den von der HRZ zu Verfügung gestellten Client zu benutzen, da die Skripte in diesen Paket bereits mit den notwendigen Zugangsdaten vorkonfiguriert sind (Groupname: “vpnuni” / Grouppassword: Verschlüsselt!) Es ist zu beachten, dass nur Universitätsangehörige das Programm herunterladen können (Passwort Abfrage!). An dieser Stelle sei auf die OnLine Anleitung [11] der Universität nochmals verwiesen.
Ist der VPN-Client installiert, muss man nun den Dämon starten (falls nicht beim Start automatisch geschehen) und anschliessend den Client (z.B. mit dem Profile nattcp):

1. #/etc/init.d/vpnclient_init start
2. #vpnclient connect nattcp

Wenn alles geklappt hat, gibt man nun den Benutzernamen und das Passwort ein und schon kann man die Netzwerk-Dienste nutzen! (Auch Internet! :-) )

6. Probleme und Einschränkungen

6.1. Allgemeine Probleme

1. Etwas OT: Am Anfang konnte ich den Treiber nicht laden; modprobe quittierte die Versuche, dies zu tun, mit der Meldung “kernel-module version mismatch: usbvnetr.o was compiled for kernel version 2.4.18 while this kernel is version 2.4.18-bf2.4.”, was nicht sein konnte, da ich die Kernel-Headers extra für die Kompilierung dieser Module heruntergeladen hatte. Nach langem Suchen habe ich entdeckt, dass in den Kernel-Sources (/usr/include/linux/version.h) die falsche Version eingetragen war… warum auch immer. Nach dem ich hier die richtige Versionsnummer eingetragen habe, war das Problem auch verschwunden.

6.2. Probleme bei der Verwendung von AtmelWLanDriver

1. Komischerweise konnte ich das Gerät mit diesem Treiber nicht richtig initialisieren, das System blieb hängen bei der Meldung vnet_kernel.c: usb device reseting. Den Vorschlag, der im Internet häufig zu finden ist [10], den USB Treiber usb-uhci in uhci umzubenennen, brachte bei mir leider keine Besserung. Ich habe alle Versionen dieses Treibers und alle Patches verwendet, das Gerät blieb immer hängen. Wer eine Lösung hierfür parat hat, der möge sie mir bitte mitteilen :-)


6.3. Probleme bei der Verwendung von BerliOS-Driver

1. Der Treiber lies sich anfangs nicht kompilieren und gab eine ganze Menge Unresolved Symbols aus, was die Vermutung nahe legte, dass irgendwelche Path nicht gefunden wurde. Und in der Tat: in der Makefile steht “KERNEL_SRC = /lib/modules/$(KERNEL_VERSION)/build“, anstatt “KERNEL_SRC = /usr/src/linux“. Nach der Änderung lies sich der Treiber problemlos installieren – und funktioniert bis jetzt ohne Probleme.
2. Wenn ich versuche, den Rechner im Netz via dhclient anzumelden, ohne vorher kismet einmal aufgerufen zu haben, bekomme ich vom Server keine Antwort. (”No DHCPOFFERS recived”). Ich vermutte, dass KISMET ein childprocess startet, welcher die Netze identifiziert, die später den DHCLIENT abfragt… ich weiss es aber nicht genau. Auch an dieser Stelle wäre ich für jede Hilfe dankbar!

6.4. Probleme bei der Verwendung von WLan-NG Driver

1. (noch) Nicht getestet.

6.5. Einschränkungen

Bei dem von mir verwendeten Treiber (BerliOS) ist es noch nicht möglich, das Gerät im “promiscuos mode” zu betreiben. So steht es auch in der Entwickler-Homepage: “Currently, the driver has some limitations: no promiscuos, monitor or station mode and no support for libcap, i.e. it does not work with Kismet or Airsnort and it cannot act as WLAN Access Point. This is a restriction imposed by the current firmware.” Da ich die noch in Entwicklung befindliche Version 0.11beta4 verwende, ist es mir jedoch gelungen, Kismet zu benutzen. AirSnort wollte nicht laufen, das Programm sagt: “Cannot set promiscuos mode”, wenn ich ein Scann zu starten versuche. Wer auf AirSnort trotzdem nicht verzichten möchte, muss nach Angaben seiner Entwickler auf die neuste Version von WLan-NG zurückgreifen und diese patchen. So soll es auch mit diesem Device möglich sein, dieses Tool zu benutzen – dies wurde aber von mir nicht getestet.

7. Quellen / Links

1. Uni-Bibliothek
2. D-LINK
3. Google
4. Devices & Drivers List
5. Atmelwlandriver
6. Sourceforge
7. BerliOS-Driver
8. BerliOS
9. AbsoluteValue Systems (WLan-NG Driver)
10. Netgear MA101 & RedHat 8.0 HOWTO
11. Funk-Lan an der Universität Bielefeld

Keine Kommentare:

Kommentar veröffentlichen