Auf diesen Seiten wird erklärt, wie man den 11 Mbit (802.11b) Wireless USB Adapter DWL-122 der Firma D-Link unter Debian und seinen Derivaten richtig einbindet. Auf anderen Linuxdistributionen sollte es eigentlich auch funktionieren, eventuell sind einige Dateinamen anzupassen.

Dieser WLAN- Adapter ist so groß wie ein USB-Stick, eignet sich also prima zum Mitnehmen und loslegen. Er wird seit langem nicht mehr hergestellt, ist aber immer noch sehr preisgünstig gebraucht auf größeren Handelsplatformen zu haben.

Nach einstecken des Sticks wird er bei Debian Etch sofort richtig vom System erkannt:

# lsusb
...
Bus 002 Device 002: ID 2001:3700 D-Link Corp. [hex] DWL-122 802.11b
... 

Es existieren für den verwendeten prism2 -Chipsatz 2 unterschiedliche Treiber, aber durch den USB-Anschluss kommt nur der Treiber wlan-ng in Frage. Dieser Treiber ist nicht im Kernel enthalten.

Deswegen werden entweder (A): das passende Kernelmodul zum Distributionskernel als Paket, (B): alternativ das passende Header-Paket zum installiertem Kernel der Distribution, oder (C): ein selbst gebauter Kernel mit passenden Kernel-Sourcen gebraucht.

Installation

Die drei oben genannten Möglichkeiten werden hier beschrieben.

(Variante A)

Diese benötigt ein zusätzliches Repository, welches das Paket linux-wlan-ng-modules enthält. Beispielsweise Knoppix führt solch ein Repository.

aptitude install linux-wlan-ng-modules linux-kernel-headers linux-wlan-ng-firmware linux-wlan-ng linux-wlan-ng-source

installiert alles, was mit einem Standardkernel der Distribution benötigt wird.

(Variante B und C)

Ist das Paket linux-wlan-ng-modules nicht im Standardrepository der benutzten Distribution enthalten, bietet sich eine der anderen Varianten an.

Bei einem Eigenbaukernel oder Distributionskernel gehe ich davon aus, das die passenden Quellen zum Kernel unter /usr/src/linux liegen und das der Treiber von ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/ herunter geladen wurde, oder als Debian-Paket linux-wlan-ng-source installiert ist.

Variante B, mit Distributionskernel:

Die Firmware sowie die Sourcen des Treibers und die Kernelheader installieren:

aptitude install linux-kernel-headers linux-wlan-ng-firmware linux-wlan-ng linux-wlan-ng-source

Die Datei /usr/src/modules/linux-wlan-ng/debian/config-for-lwng editieren, nur die USB-Treiber werden gebraucht.

vim /usr/src/modules/linux-wlan-ng/debian/config-for-lwng
...
PRISM2_PCMCIA=n
PRISM2_PLX=n
PRISM2_PCI=n
PRISM2_USB=$BUILD_MODULES
UTILS=n
... 

Übersetzen mit

make-kpkg modules_image

Das entstandene Paket dann einfach mit dpkg -i <Paketname.deb installieren>

Bei einem selbst gebauten Kernel (Variante C ) funktioniert auch das Bauen eines Paketes, wie in Variante B beschrieben, jedoch ist das Installieren der Sourcen von linux-wlan.org besser.

Die heruntergeladenen wlan-Treiber in /usr/src entpacken, danach in das Verzeichnis /usr/src/linux-wlan-ng<version> wechseln, die Treiber compilieren und installieren:

make config; make all; make install 

Alle Fragen ausser der nach USB sollten mit Nein beantwortet werden, wir benötigen nicht alle Module. In etc/modules.conf folgendes eintragen:

alias wlan0 prism2_usb 

Testen

Nachdem die Module übersetzt und installiert sind, wird der USB-Stick eingesteckt.

Ein ifconfig -a sollte nun ein neues Gerät wlan0 anzeigen, wenn das Modul prism2_usb automatisch geladen wird. Wenn ein ifconfig -a kein neues Gerät anzeigt, dann das Modul per Hand laden (modprobe prism2_usb).

Das muss funktionieren, sonst funktioniert die Konfiguration weiter unten nicht.

Konfiguration

Der WLAN-Stick wird als wlan0 erkannt. Wem das nicht gefällt: das lässt sich unter /etc/udev/rles.d/ ändern, in den Regeln einfach statt "wlan" ein "eth" eintragen, dann wird das Gerät als "eth1" erkannt. Das ist aber nur "optisch", hat also für die Funktion keine Bedeutung. Ich habe es bei der Bezeichnung wlan0 gelassen.

In die Datei /etc/network/interfaces ist für offenes WLAN mit DHCP folgendes einzutragen:

#/etc/network/interfaces #
...
# D-Link DWL 122
allow-hotplug wlan0
iface wlan0 inet dhcp
pre-up modprobe prism2_usb
pre-up wlanctl-ng wlan0 lnxreq_ifstate ifstate=enable
pre-up wlanctl-ng wlan0 lnxreq_autojoin ssid=FONAP authtype=opensystem
post-down modprobe -r prism2_usb 

Nachdem die Datei abgespeichert wurde, wird beim Einstecken des Sticks automatisch eine Adresse bezogen. Wenn eine WEP- Verschlüsselung verwendet werden soll, ist die Datei folgendermaßen abzuändern:

...
#D-Link DWL 122 mit Angabe einer SSID und WEP- Verschlüsselung
allow-hotplug wlan0
iface wlan0 inet dhcp
pre-up modprobe prism2_usb
pre-up wlanctl-ng wlan0 lnxreq_ifstate ifstate=enable
pre-up wlanctl-ng wlan0 lnxreq_autojoin ssid=<meine_ssid> authtype=opensystem
pre-up wlanctl-ng wlan0 dot11req_mibset mibattribute=dot11WEPDefaultKeyID=0
pre-up wlanctl-ng wlan0 dot11req_mibset mibattribute=dot11ExcludeUnencrypted=true
pre-up wlanctl-ng wlan0 dot11req_mibset mibattribute=dot11PrivacyInvoked=true
pre-up wlanctl-ng wlan0 dot11req_mibset \  mibattribute=dot11WEPDefaultKey0=00:01:02:03:04:05:06:07:08:09:0a:0b:0c 

Der Stick kann alternativ auch über ein einfaches Skript konfiguriert werden:

# Skript stammt im Original von:
# http://www.schiessle.org/howto/thinkpadx24.shtml
echo 'Starting wlan interface...'
wlanctl-ng wlan0 lnxreq_ifstate ifstate=enable
wlanctl-ng wlan0 lnxreq_autojoin ssid=<your_APs_SSID>
authtype=opensystem
#WEP Konfiguration (optional, aber empfohlen)
# Default-Key auswählen
wlanctl-ng wlan0  dot11req_mibset  mibattribute=dot11WEPDefaultKeyID=0
# Unverschlüsslete Teilnehmer nicht akzeptieren  wlanctl-ng wlan0  dot11req_mibset \ mibattribute=dot11ExcludeUnencrypted=true
# WEP anschalten
wlanctl-ng wlan0  dot11req_mibset  mibattribute=dot11PrivacyInvoked=true
# WEP-Key setzen (hier WEP128 Beispiel)
wlanctl-ng wlan0  dot11req_mibset  mibattribute=dot11WEPDefaultKey0=01:02:03:04:05:06:07:08:09:10:11:12:13
# Netzwerkkarte aktivieren und den Gateway setzen
ifconfig wlan0 <your_IP> netmask <your_netmask> broadcast <your_broadcast>
route add default gw <your_gateway> 

LutzWillek/dlink (zuletzt geändert am 2007-12-23 22:48:36 durch localhost)