• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[HowTo] Edimax EW-7317Ug WLAN USB Dongle

Status
Für weitere Antworten geschlossen.

Heart

Hacker
Hallo,

habe einen Edimax EW-7317UG WLAN-USB Stick gekauft. Ist ein zd1211-chip, der Treiber ist auch installiert.
Code:
# lsmod | grep zd
Module                  Size  Used by
zd1211                226760  0
usbcore               112640  5 zd1211,usbhid,ehci_hcd,ohci_hcd

Habe nun in YAST eine neue Netzwerkkarte angelegt > Wireless und als Modul "zd1211" eingetragen (und Gateway usw. wie bei eth0). Leider will wlan0 aber noch nicht.

Ein "ifup wlan0" bringt mir
Code:
# ifup wlan0
    wlan0
    wlan0     warning: using NO encryption
ifup-wireless: command 'iwconfig wlan0 mode Managed' returned
ifup-wireless:  Error for wireless request "Set Mode" (8B06) :
ifup-wireless:     SET failed on device wlan0 ; Invalid argument.
ifup-wireless: command 'iwconfig wlan0 nick linux' returned
ifup-wireless:  Error for wireless request "Set Nickname" (8B1C) :
ifup-wireless:     SET failed on device wlan0 ; Invalid argument.
ifup-wireless: command 'iwconfig wlan0 key off' returned
ifup-wireless:  Error for wireless request "Set Encode" (8B2A) :
ifup-wireless:     SET failed on device wlan0 ; Invalid argument.
ifup-wireless: command 'iwconfig wlan0 essid linux' returned
ifup-wireless:  Error for wireless request "Set ESSID" (8B1A) :
ifup-wireless:     SET failed on device wlan0 ; Invalid argument.
 
OP
H

Heart

Hacker
Mit YAST wohl nicht möglich, den Stick zum Laufen zu bewegen....

Wenn ich jedoch in der Konsole drei Befehle ausführe, dann habe ich eine Verbindung :!:

# ifconfig wlan0 up (iwconfig will not work otherwise)
# iwconfig wlan0 essid youressid
# dhcpcd wlan0

Daher die Frage, kann ich irgendwie ein Skript daraus machen, welches gleich beim Booten (als Root) ausgeführt wird, damit ich gleich nach dem Booten die wlan-Verbindung habe?
 
OP
H

Heart

Hacker
Ok, hab jetzt einen (für mich) funktionierenden Weg gefunden, den WLAN-Stick endlich zum Funktionieren zu bewegen :wink:

1. Netzwerk-Einstellungen mittels YAST für diesen WLAN-Stick zu versuchen, kann man imho gleich vergessen (funktioniert nicht)
2. Den aktuellen Treiber von hier installieren (Kernel-Source und mind. ein getätigtes 'menu config' bzw. 'menu menuconfig' sollte vorhanden sein, sonst klappt die zd1211-Installation nicht!!!)
3. Dann den soeben installierten zd1211-Treiber als Modul laden
Code:
modprobe -v zd1211
4. Mit 'lsmod | grep zd' überprüfen, ob es geklappt hat

So, das war's eigentlich schon :wink:

Wenn ich jetzt
Code:
ifconfig wlan0 up 
iwconfig wlan0 essid DEINE_ESSID
dhcpcd wlan0
ausführe, werde ich meinem Router verbunden (Router sollte natürlich in diesem Bsp. keine Verschlüsselung aktiviert haben und neue MAC-Adressen zulassen und DHCP aktiviert haben 8) )

Damit diese 3 Befehle nicht nach jedem Neustart erneut eingeben werden müssen, habe ich mir ein runlevel-Startskript dafür gemacht.

1.
Code:
cd /etc/init.d
2.
Code:
touch wlan
3. Die erstellte Datei mit Lieblingseditor bearbeiten und folgenden Text reinkopieren (also z.b. 'mcedit wlan')
Code:
#! /bin/sh
#
# /etc/init.d/wlan
#
### BEGIN INIT INFO
# Provides:       Edimax WLAN-USB Stick EW 7317UG (zd1211)
# Required-Start: $local_fs dhcpcd
# Should-Start: coldplug pcmcia
# Required-Stop: dhcpcd $local_fs
# Default-Start:  2 3 5
# Default-Stop:
# Description:    Stellt das wlan0 Interface mit dem zd1211 Treiber-Modul her
### END INIT INFO

# Shell functions sourced from /etc/rc.status:
#      rc_check         check and set local and overall rc status
#      rc_status        check and set local and overall rc status
#      rc_status -v     ditto but be verbose in local rc status
#      rc_status -v -r  ditto and clear the local rc status
#      rc_failed        set local and overall rc status to failed
#      rc_reset         clear local rc status (overall remains)
#      rc_exit          exit appropriate to overall rc status
. /etc/rc.status

rc_reset

case "$1" in
  start)
        echo -n "Starting WLAN-USB-Stick Edimax EW-7317UG"
        ifconfig wlan0 up
        iwconfig wlan0 essid DEINE_ESSID
        dhcpcd wlan0
        rc_status -v2
        ;;
  stop)
        echo -n "Stopping WLAN-USB-Stick Edimax EW-7317UG"
        ifdown wlan0
        rc_status -v2
        ;;
  *)
        echo "Usage: $0 {start|stop}" >&2
        exit 1
        ;;
esac

exit 0
4. Skript ausführbar machen
Code:
chmod +x wlan
5. ....aktivieren mit
Code:
insserv wlan
6. Dann noch den SuSE-spezifischen Link erstellen, damit das 'wlan'-Skript mit 'rcwlan' aufgerufen werden kann:

Code:
cd /usr/sbin
ln -s /etc/init.d/wlan rcwlan

ausprobieren mit rcwlan start, rcwlan stop!

Obiges funktioniert bei mir (SuSE10), so dass ich den Edimax WLAN-Stick EW-7317UG (zd1211-Chip) gleich nach dem Booten zur Verfügung habe und los surfen kann :wink:

Alles natürlich OHNE GEWÄHR!!!
 
OP
H

Heart

Hacker
Ok, hab jetzt einen (für mich) funktionierenden Weg gefunden, den WLAN-Stick endlich zum Funktionieren zu bewegen :wink:

1. Netzwerk-Einstellungen mittels YAST für diesen WLAN-Stick zu versuchen, kann man imho gleich vergessen (funktioniert nicht)
2. Den aktuellen Treiber von hier installieren (Kernel-Source und mind. ein getätigtes 'menu config' bzw. 'menu menuconfig' sollte vorhanden sein, sonst klappt die zd1211-Installation nicht!!!)
3. Dann den soeben installierten zd1211-Treiber als Modul laden
Code:
modprobe -v zd1211
4. Mit 'lsmod | grep zd' überprüfen, ob es geklappt hat

So, das war's eigentlich schon :wink:

Wenn ich jetzt
Code:
ifconfig wlan0 up 
iwconfig wlan0 essid DEINE_ESSID
dhcpcd wlan0
ausführe, werde ich meinem Router verbunden (Router sollte natürlich in diesem Bsp. keine Verschlüsselung aktiviert haben und neue MAC-Adressen zulassen und DHCP aktiviert haben 8) )

Damit diese 3 Befehle nicht nach jedem Neustart erneut eingeben werden müssen, habe ich mir ein runlevel-Startskript dafür gemacht.

1.
Code:
cd /etc/init.d
2.
Code:
touch wlan
3. Die erstellte Datei mit Lieblingseditor bearbeiten und folgenden Text reinkopieren (also z.b. 'mcedit wlan')
Code:
#! /bin/sh
#
# /etc/init.d/wlan
#
### BEGIN INIT INFO
# Provides:       Edimax WLAN-USB Stick EW 7317UG (zd1211)
# Required-Start: $local_fs dhcpcd
# Should-Start: coldplug pcmcia
# Required-Stop: dhcpcd $local_fs
# Default-Start:  2 3 5
# Default-Stop:
# Description:    Stellt das wlan0 Interface mit dem zd1211 Treiber-Modul her
### END INIT INFO

# Shell functions sourced from /etc/rc.status:
#      rc_check         check and set local and overall rc status
#      rc_status        check and set local and overall rc status
#      rc_status -v     ditto but be verbose in local rc status
#      rc_status -v -r  ditto and clear the local rc status
#      rc_failed        set local and overall rc status to failed
#      rc_reset         clear local rc status (overall remains)
#      rc_exit          exit appropriate to overall rc status
. /etc/rc.status

rc_reset

case "$1" in
  start)
        echo -n "Starting WLAN-USB-Stick Edimax EW-7317UG"
        ifconfig wlan0 up
        iwconfig wlan0 essid DEINE_ESSID
        dhcpcd wlan0
        rc_status -v2
        ;;
  stop)
        echo -n "Stopping WLAN-USB-Stick Edimax EW-7317UG"
        ifdown wlan0
        rc_status -v2
        ;;
  *)
        echo "Usage: $0 {start|stop}" >&2
        exit 1
        ;;
esac

exit 0
4. Skript ausführbar machen
Code:
chmod +x wlan
5. ....aktivieren mit
Code:
insserv wlan
6. Dann noch den SuSE-spezifischen Link erstellen, damit das 'wlan'-Skript mit 'rcwlan' aufgerufen werden kann:

Code:
cd /usr/sbin
ln -s /etc/init.d/wlan rcwlan

ausprobieren mit rcwlan start, rcwlan stop!

Obiges funktioniert bei mir (SuSE10), so dass ich den Edimax WLAN-Stick EW-7317UG (zd1211-Chip) gleich nach dem Booten zur Verfügung habe und los surfen kann :wink:

Alles natürlich OHNE GEWÄHR!!!
 

ferrero

Newbie
Hallo Heart !!!

Bei mir funktioniert selbst die WPA - Verschlüsselung bei meinem USB-Stick (Level one mit zd1211 chip von Zydas!!!

Interessiert wie es geht ???

Einfach antworten und ich poste meine Loesung !!!

(Allerdings hab ich keinen Skrip womit das Netzwerk beim Booten zur verfügung steht... Der Stick ist aber sofort da brauch kein: ifconfig wlan0 up ; muss nur den wpa_supplicant starten)

ferrero
 
OP
H

Heart

Hacker
@ferrero: Bitte schreib doch genau rein, wie Du den USB-Dongle zum Laufen bewegt hast (mit Verschlüsselung). Sicher interessant für mich und wohl für einige, die diesen bei ebay sehr häufig zu findenden Stick kaufen werden :wink:
 

ferrero

Newbie
Hallo Heart !!!
Howto: WLAN / WPA über WPA_SUPPLICANT/ USB-STICK mit Chip zd1211von Zydas // by ferrero

Linux Distribution: Suse 10.0

1) Voraussetzungen:
Kernel Sources; wpa_supplicant sources; gcc; ifplugd; wireless-tools; openssl;n curses
(inklusive alle Abhängigkeiten die bei Yast2 mit installiert werden! z. B. binutils , glib etc.)

Man muss die wpa_supplicant sources runterladen. z.B. bei http://hostap.epinet.fi/wpa_supplicant
(Achtung !!! Es ist jetzt die Version 0.4.8 freigegeben!!! Leider ist es momentan nicht möglich eine andere Version als 0.4.7 zu benutzen, da wpa_supplicant den zd1211 Treiber nicht von Haus aus unterstützt und zd1211-Project nur einen Patch für 0.4.7 herausgebracht hat! Ergo unter 'Old Releases' die Version 0.4.7 runterladen.)

Danach auf der zd1211-Project Seite unter http://zd1211.ath.cx/wiki/WPAConfiguration findet man den Patch, den man braucht um wpa_supplicant zd1211-tauglich zu machen.
Man klickt auf wpa_supplicant-0.4.7.diff unter Attachment und bekommt die HTML-Version des patches zu sehen. Zum Runterladen sollte man ganz unten auf 'Original Format' klicken und runterladen.

Sollte sich eine zweite Netzwerkkarte im System befinden ist es ausreichend, wenn man sie nicht mit dem System starten lässt, sondern erst bei Kabelanschluss (Deshalb ifplugd installieren und in Yast ändern !!!!). Es ist egal ob wie die sich ihre IP-Adresse holt kann bei DHCP bleiben.

2) Treiber

Es sollten momentan ausschliesslich die Treiber aus dem zd1211 Project verwendet werden. (http://zd1211.ath.cx)
Niemals die Originaltreiber aus der Zydas-Seite, auch wenn die neuer sind !!!!
Die Originaltreiber sind schlecht programmiert, was spätestens bei den vielen Fehlermeldungen nach Make klar wird.
(Der aktuelle Zydas Treiber 2_4_0_0 hat sogar eine WPA Encryption drin, die leider nicht funzt.)
Der aktuelle Project Treiber (r52) hat keine WPA aber WEP 128BIT Verschlüsselung.
Installation ist einfach: Entpacken; make install (Die Makefile muss nicht editiert werden! Die Sources müssen zum benutzten Kernel passen. Es kommt eine einzige Fehlermeldung, ist aber nicht wichtig: fVERIFY_FLASH'.); modprobe -v zd1211; Der Stick bekommt die Bezeichnung wlan0, deshalb: ifconfig wlan0 up.

3) WPA
Jetzt entpackt man die wpa_supplicant sources. Die Sources werden in ein Verzeichnis wpa_supplicant-0.4.7 entpackt. Der Patch sollte eine Ebene über dem Verzeichnis /wpa_supplicant-0.4.7 sein.

Im Terminal (Systemverwaltungsmodus) ins Verzeichnis mit der Patchdatei wechseln und mit Befehl patch -p0 < wpa_supplicant-0.4.7.diff den wpa_supplicant auf Vordermann bringen.
Ins wpa_supplicant Verzeichnis wechseln und die defconfig ins .config kopieren mit cp defconfig .config danach den genialen Midnight Commander starten mit mc. Die Datei .config mit F4 öffnen und die Zeile CONFIG_DRIVER_ZD1211=y auskommentieren (# davor löschen!). Drunter schreibe ich dann CONFIG_WIRELESS_EXTENSION=y, zwar weiß ich nicht ob es ohne funzt aber die original Makefile erwartet diese Zeile und schaden kanns net.

Okey dokey ... jetzt Make install !!!

Danach hat man ein paar Dateien mehr, und zwar die wpa_supplicant die wpa_cli und die wpa_passphrase und die wpa_supplicant-0.4.7.conf.

Diese wpa_supplicant.conf muss noch bearbeitet werden!!!

# Only WPA-PSK is used. Any valid cipher combination is accepted.

network={
ssid="ferrari"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk=bbddbeebeddff2830eff587deba876edbcdadf653687abdebb635356adef1234
priority=2
}
Diesen Block kann man bearbeiten, wenn die ssid gesendet wird. Psk ist in Hexadezimal, was ich beim Router auch in Hexadezimal eingetragen habe. Sollte man Ascii benutzt haben dann mit wpa_passphrase die Hex version zeigen lassen oder psk in Anführungszeichen (psk=''mein satz'').

So nun meint man fertig zu sein... Naja, fast... Die wpa_supplicant.conf hat einige Netzwerk-Blöcke die nur einige Freaks oder James Bond brauchen und die muss man noch kommentieren. Es gibt 2 Möglichkeiten:

1)starten des wpa_supplicant im debug modus.
./wpa_supplicant -iwlan0 -c wpa_supplicant.conf -d -D zd1211
Es wird eine lange Litanei im Terminal angezeigt, darunter sowas wie Error in Line 474 unknown Sim etc. diese ganzen Lines merken und dann die wpa_supplcant.conf editieren, indem man die Netzwerkblöcke kommentiert, die unbekannt sind.
2)Ich musste diese Blöcke kommentieren:
# EAP-SIM with a GSM SIM or USIM
#network={
# ssid="eap-sim-test"
# key_mgmt=WPA-EAP
# eap=SIM
# pin="1234"
# pcsc=""
#}


# EAP-PSK
#network={
# ssid="eap-psk-test"
# key_mgmt=WPA-EAP
# eap=PSK
# identity="eap_psk_user"
# eappsk=06b4be19da289f475aa46a33cb793029
# nai="eap_psk_user@example.com"
#}
# LEAP with dynamic WEP keys
#network={
# ssid="leap-example"
# key_mgmt=IEEE8021X
# eap=LEAP
# identity="user"
# password="foobar"
#}

# EAP-FAST with WPA (WPA or WPA2)
#network={
# ssid="eap-fast-test"
# key_mgmt=WPA-EAP
# eap=FAST
# anonymous_identity="FAST-000102030405"
# identity="username"
# password="password"
# phase1="fast_provisioning=1"
# pac_file="/etc/wpa_supplicant.eap-fast-pac"
#}
#network={
# ssid="eap-fast-test"
# key_mgmt=WPA-EAP
# eap=FAST
# anonymous_identity="FAST-000102030405"
# identity="username"
# password="password"
# phase1="fast_provisioning=1"
# pac_file="blob://eap-fast-pac"
#}
# Catch all example that allows more or less all configuration modes
#network={
# ssid="example"
# scan_ssid=1
# key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
# pairwise=CCMP TKIP
# group=CCMP TKIP WEP104 WEP40
# psk="very secret passphrase"
# eap=TTLS PEAP TLS
# identity="user@example.com"
# password="foobar"
# ca_cert="/etc/cert/ca.pem"
# client_cert="/etc/cert/user.pem"
# private_key="/etc/cert/user.prv"
# private_key_passwd="password"
# phase1="peaplabel=0"
#}
(Bei diesem letztem, weiß ich nicht mehr, ob es notwendig ist.)
So, nach dem speichern in der wpa_supplicant.conf kann man das ganze vom wpa_supplicant-Verzeichnis im Terminal starten, wenn zd1211 Modul geladen und wlan0 up ist: ./wpa_supplicant -B -iwlan0 -c wpa_supplicant.conf -D zd1211
Nach dem Start kommt keine Meldung mehr! Wer den Status abfragen will kann den kwifimanager oder vom Terminal wpa_cli starten.
Beim kwifimanager müsste man sehen können, das man mit dem Router assoziiert ist, das heisst die MAC-Adresse und die ssid müssten sichtbar sein. Wer schon eine IP über DHCP vom Router hat (kann 10 Sekunden dauern) ist ready to go!!
Wer keine IP bekommt muss irgendwie versuchen für wlan0 die dhcp zu aktivieren. Bei mir funzt der befehl dhclient wlan0 nicht, vielleicht weil der nicht drauf ist, deshalb füge ich manuell eine Netzwerkarte über yast ein. Das ist nicht weiter schwierig. (Es kann mal vorkommen, das yast den USB-Stick erkennt, dann muss man nur noch die Karte bearbeiten.)
Gerätetyp: Drahtlos
Konfigurationsname: id-00:11:... (MAC Adresse des Stick)
Name der Hardwarekonfiguration: usb-id-1-1.2 ... (diese Zahleninfo findet man bei der Hardwareinfo z. B. bei yast unter USB-USB WLAN 2.0-sysfs_usb_id:...)
Modulname: zd1211
Dann auf weiter klicken:
Konfigurationsmethode DHCP
Unter Erweitert auf Besondere Einstellungen gehen
Geräteaktivierung: 'falls hot-plugged'
Auf weiter klicken:
Betriebsmodus : Verwaltet
Der Rest ist unwichtig !!!
Auf weiter klicken und die Warnung 'Keine Verschlüsselung' ignorieren.
Sinn und zweck dieser Krückenkonstruktion ist das Erstellen einer Datei, die da heisst /etc/sysconfig/network/ifcfg-wlan-id-00:.... in dieser Datei steht dann drin BOOTPROTO='dhcp'. Wer das also selber machen kann braucht kein yast ....
So nach dem beenden von yast mal beim kwifimanager schauen ob IP kommt.
Noch ein Wort zu wpa_cli:
wpa_cli ist ein starkes Tool, der erst aufgerufen werden kann, wenn wpa_supplicant gestartet worden ist. Vom Systemverwaltungsterminal aus einfach aufrufen mit wpa_cli.
status – zeigt den aktuellen Status an. Z. B. bei mir:
bssid=00:11:6b:22:23:33
ssid=ferrero
pairwise_cipher=TKIP
group_cipher=TKIP
key_mgmt=WPA-PSK
wpa_state=COMPLETED
ip_address=192.168.123.111
Solange de IP noch nicht geholt worden ist, fehlt die letzte Zeile!
Sollte die letzte Zeile nicht kommen oder gar ein time out erscheinen mal den Stick entfernen und wieder einsetzen oder den Rechner mal durchstarten.
Der Nutzen dieses Tools liegt beim Abmelden!!!
disconnect – damit verabschiedet man sich ordnungsgemäß vom Router
terminate – killt den wpa_supplicant
quit – beendet das Tool
Der Sinn dieser Prozedur ist das ersparen dieses timeouts oder das Fehlschlagen de IP-Vergabe.
(Achtung terminate hat den Effekt wlan0 down, deshalb muss (ohne ein Neustart) per Hand ifconfig wlan0 up, wenn man nochmal eine Netzwerkverbindung haben will, danach wpa_supplicant wie gehabt!)

Hinterher braucht man nur noch im Terminal (Systemverwaltung) den wpa_supplicant im Background zu starten (./wpa_supplicant -B -iwlan0 -c wpa_supplicant.conf -D zd1211) und gut ist . Abschluss mit wp_cli wie beschrieben. Wer dazu noch ein Skript hinbiegt hat dat ganze sofort am Start!

Mit freundlichen Grüßen
ferrero
 
OP
H

Heart

Hacker
Danke Dir... werde es bei ner freien Minute testen und wenn es nicht klappt, hier nochmal Meldung machen :wink:
 
Status
Für weitere Antworten geschlossen.
Oben