BASE-UMTS-Flatrate mit Huawei E220 unter Gentoo Linux

Nachdem ich eine Weile mit der UMTS-Flatrate rumgespielt habe, soll hier nun mein Howto kommen.

Da ich ziemlich lange gebastelt habe, mag es sein, dass einige Schritte her überflüssig sind oder ich vergessen habe, irgendetwas zu erwähnen. Daher würde ich mich freuen, falls jemand Ergänzungen oder Optimierungen vorschlägt. Gerne hier als Kommentar (ich muss die Kommentare erst freischalten, also keine Eile) oder aber auch per E-Mail.

Als Vorraussetzung für dieses Howto ist ein Kernel mit einer Version >= 2.6.20-rc2 notwendig. Das Huawei E220 Modem enthält eine CD-ROM-Emulation, auf der der Windows-Treiber installiert ist. Dieses wird bei vorherigen Kernelversionen auch erkannt, nur das bringt einem unter Linux natürlich nicht viel. Ab o.g. Kernel-Version wird diese CD-ROM-Emulation ignoriert und stattdessen das Modem erkannt. Auch alles ab Version 2.6.21 funktioniert natürlich.

[Anmerkung: Es geht auch mit einer älteren Kernel-Version, dazu sind allerdings einige Tricks notwendig - siehe hier.]

Beim Kernel müssen zumindest zwei Optionen aktiviert sein: Im Menü Device Drivers / USB support / USB serial converter support die beiden Punkte USB generic serial driver support und USB driver for GSM and CDMA modems. Sicherlich sind noch einige weitere Sachen notwendig, aber die führe ich hier nicht alle auf. Wenn es bei der Erkennung schon Probleme gibt, bitte melden, dann kann ich nochmal genau reinschauen.

Bei mir hat die Erkennung unter Gentoo Linux nur zuverlässig funktioniert, wenn das USB-Modem schon beim Booten eingesteckt war. Mir ist noch nicht ganz klar, was hier den Unterschied ausmacht. Wer hier Informationen ergänzen kann – immer gerne. (Siehe auch Informationen weiter unten…)

Die Ausgabe des dmesg-Befehls enthält bei mir dann u.a.:


usbcore: registered new interface driver usbserial
drivers/usb/serial/usb-serial.c: USB Serial support registered for generic
usbcore: registered new interface driver usbserial_generic
drivers/usb/serial/usb-serial.c: USB Serial Driver core
drivers/usb/serial/usb-serial.c: USB Serial support registered for GSM modem (1-port)
option 2-1:1.0: GSM modem (1-port) converter detected
usb 2-1: GSM modem (1-port) converter now attached to ttyUSB0
option 2-1:1.1: GSM modem (1-port) converter detected
usb 2-1: GSM modem (1-port) converter now attached to ttyUSB1
option 2-1:1.2: GSM modem (1-port) converter detected
usb 2-1: GSM modem (1-port) converter now attached to ttyUSB2
usbcore: registered new interface driver option
drivers/usb/serial/option.c: USB Driver for GSM modems: v0.7.1

Falls eine Default-Route eingerichtet ist, muss diese vor der Modem-Einwahl entfernt werden. Die Routen kann man sich mit dem Befehl “route” anzeigen lassen.

Das entfernen erfolgt ebenfalls mit route, und zwar lautet die Syntax wie folgt:
route del default gw 192.168.1.1

Die IP-Adresse muss durch den jeweiligen Default-Gateway ersetzt werden.

Anschließend muss der PIN-Code zum Modem gesendet werden. Dies geschieht mit dem folgenden Befehl:

echo "AT+CPIN=1234" > /dev/ttyUSB0

Hierbei muss “1234″ durch den durch BASE zur Verfügung gestellten PIN-Code ersetzt werden. Ebenso muss das Device “/dev/ttyUSB0″ angepasst werden. Hier ist das Device aus der dmesg-Ausgabe von oben einzusetzen. Wenn sonst keine weiteren Geräte aktiviert sind, sollte hier jedoch standardmäßig “ttyUSB0″ vergeben sein.

Das Modem benötigt eine Weile, um den PIN-Code zu setzen. Daher kann dieser Befehl nicht direkt in das folgende wvdial-Skript eingebaut werden.

Bei obigem echo-Befehl kam es bei mir relativ häufig zu Aussetzern beim Modem. Wenn anschließend in den Logfiles das Modem als Disconnected und anschließend wieder als neu angeschlossen erkannt wird, hat es nicht funktioniert!

War das PIN-Setzen erfolgreich, kann man nun mittels wvdial die Einwahl starten.

Dazu ist ein wvdial-Skript erforderlich, das ich auf einer Webseite gefunden habe, die ich heute leider nicht mehr wiederfinde… Dieses Skript muss in /etc/wvdial.conf eingebaut werden.


[Dialer huawei_e220]
Modem = /dev/ttyUSB0
Baud = 460800
Init2 = ATZ
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ISDN = 0
Modem Type = Analog Modem

Der Aufruf erfolgt nun mit:
wvdial huawei_e220

Danach ergibt sich in etwa folgende Ausgabe auf dem Bildschirm:


macserver ~ # wvdial huawei_e220
--> WvDial: Internet dialer version 1.56
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.
ATDT*99#
CONNECT
--> Carrier detected. Starting PPP immediately.
--> Starting pppd at Sun May 13 10:57:32 2007
--> Pid of pppd: 6657
--> Using interface ppp0
--> pppd: H8ð·[08]
--> [06][08]ž
--> [06][08]
--> pppd: H8ð·[08]
--> [06][08]ž
--> [06][08]
--> pppd: H8ð·[08]
--> [06][08]ž
--> [06][08]
--> pppd: H8ð·[08]
--> [06][08]ž
--> [06][08]
--> pppd: H8ð·[08]
--> [06][08]ž
--> [06][08]
--> local IP address 10.161.1.91
--> pppd: H8ð·[08]
--> [06][08]ž
--> [06][08]
--> remote IP address 10.64.64.64
--> pppd: H8ð·[08]
--> [06][08]ž
--> [06][08]
--> primary DNS address 212.23.97.3
--> pppd: H8ð·[08]
--> [06][08]ž
--> [06][08]
--> secondary DNS address 212.23.97.2
--> pppd: H8ð·[08]
--> [06][08]ž
--> [06][08]

In den Systemlogs sollten sich ähnliche Einträge wie hier ergeben:


May 13 10:56:35 m pppd[6557]: Terminating on signal 15
May 13 10:56:35 m pppd[6557]: Connect time 6.7 minutes.
May 13 10:56:35 m pppd[6557]: Sent 5150 bytes, received 0 bytes.
May 13 10:56:35 m pppd[6557]: Connection terminated.
May 13 10:57:32 m pppd[6657]: pppd 2.4.4 started by root, uid 0
May 13 10:57:32 m pppd[6657]: Using interface ppp0
May 13 10:57:32 m pppd[6657]: Connect: ppp0 <--> /dev/ttyUSB0
May 13 10:57:32 m pppd[6657]: CHAP authentication succeeded
May 13 10:57:32 m pppd[6657]: CHAP authentication succeeded
May 13 10:57:36 m pppd[6657]: Could not determine remote IP address: defaulting to 10.64.64.64
May 13 10:57:36 m pppd[6657]: local IP address 10.161.1.91
May 13 10:57:36 m pppd[6657]: remote IP address 10.64.64.64
May 13 10:57:36 m pppd[6657]: primary DNS address 212.23.97.3
May 13 10:57:36 m pppd[6657]: secondary DNS address 212.23.97.2

wvdial läuft, bis die Verbindung beendet wird. Dies kann mittels STRG+C in der wvdial-Konsole erfolgen. Soll die Verbindung später wieder aufgebaut werden, ist es nicht notwendig, den PIN-Code erneut zu setzen. Dies muss nur nach dem erstmaligen Einstecken des USB-Modems erfolgen. (Ein weiterer Grund, das PIN-Setzen nicht in das Verbindungsskript einzubauen!)

Wenn ich das USB-Modem im laufenden Betrieb entferne und wieder anstecke, wird im /dev-Verzeichnis lediglich das Device “ttyUSB0″ angelegt (statt zusätzlich auch noch ttyUSB1-3). Dies macht scheinbar den Unterschied zwischen Erkennung beim Booten und Erkennung im laufenden Betrieb aus und verhindert eine Verbindung.

[Kleinere Updates, 7. Januar 2008]