Kategorien
Computer

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]

13 Antworten auf „BASE-UMTS-Flatrate mit Huawei E220 unter Gentoo Linux“

hallo!

was is bei mir falsch, wenn ich linux-2.6.24.tar.bz2 verwende aber keinen USB SERIAL CONVERTER SUPPORT auswählen kann?

bitte um info

vielen dank

Hallo!

Was genau funktioniert denn nicht? Ist das Menü ausgegraut?

Evtl. wäre es eine Lösung, eine alte (funktionierende) Kernel-Config in das 2.6.24-Verzeichnis zu kopieren und mit „make oldconfig“ quasi zu übernehmen.

Bringt der GSM Modem Support besonderen Nutzen? Bei mir läuft das Modem mit dem generischen USB-Modemtreiber, allerdings mit einem älteren Kernel.
Führt das zu Performanceeinbußen? Ich habe das Gefühl, unter Linux weniger Durchsatz als unter Windows, ca 50k/sek, zu haben.

Hi,

thanks for this nice HowTo! 🙂
It didn’t work here but pointed me in the right direction (Using Kubuntu 7.04 32Bit on a 2year old Dell lappy, „lsusb“ shows my card as“Bus 001 Device 002: ID 12d1:1003″.)

Here is how i finally got it working:

– Boot with card plugged in (when i plug it in after boot i always get „modem not responding“ error @ wvdial)
– issue cmd „modprobe usbserial vendor=0x12d1 product=0x1003“ as root
– wait till /dev/ttyUSB0 and /dev/ttyUSB1 appear (like 10 secs)
– „wvdial base“ as logged in user

My /etc/wvdial.conf looks like this:

[Dialer base]
Phone = *99#
Username = base
Password = base
Modem = /dev/ttyUSB0
Baud = 460800
Stupid Mode = 1
Carrier Check = no
Init2 = ATZ
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ISDN = 0
Modem Type = Analog Modem

Regards,
Stefan

Hallo,

kannst Du mir bitte deine Kernel Config schicken…
Ich habe alle sachen in den kernel fix reingebaut (dh ich habe alles anmarkiert), jedoch finde ich mit lsusb das device nicht, und habe zusätzlich auch beim dmesg nur eine zeile die sagt, dass zwar was registriert wurde aber dennoch nicht gefunden wurde.

kernel ist der 2.6.27.6

~# dmesg |grep -10 GSM
usbserial: USB Serial support registered for Moschip 7840/7820 USB Serial Driver
mos7840: Moschip 7840/7820 USB Serial Driver 1.3.1
usbcore: registered new interface driver mos7840
usbserial: USB Serial support registered for moto-modem
usbcore: registered new interface driver moto-modem
usbserial: USB Serial support registered for navman
usbcore: registered new interface driver navman
usbserial: USB Serial support registered for ZyXEL – omni.net lcd plus usb
usbcore: registered new interface driver omninet
omninet: v1.1:USB ZyXEL omni.net LCD PLUS Driver
usbserial: USB Serial support registered for GSM modem (1-port)
usbcore: registered new interface driver option
option: USB Driver for GSM modems: v0.7.2
usbserial: USB Serial support registered for oti6858
usbcore: registered new interface driver oti6858
usbserial: USB Serial support registered for pl2303
usbcore: registered new interface driver pl2303
pl2303: Prolific PL2303 USB to serial adaptor driver
safe_serial: v0.0b sl@lineo.com, tbr@lineo.com
safe_serial: USB Safe Encapsulated Serial
safe_serial: vendor: 0 product: 0 safe: 1 padded: 1

usbserial: USB Serial support registered for safe_serial

Hallo,

vielen Dank, gute Hilfe um es erstmal zum laufen zu bekommen. Ein paar Anmerkungen:

Folgende Einträge waren bei mir noch notwendig, wohl da sie in dem allgemeinen Setup der wvdial.conf nicht enthalten waren (jemand anders hat es schon oben gepostet, wollte das nur bestätigen):

Phone = *99#
Username = base
Password = base

Und ich kann die SIM Karte nicht entsperren, mein Kernel muckt dann (2.6.28.1 und 2.6.28.3 gleichermassen):

(dmesg nach echo „AT+CPIN=0987“ > /dev/ttyUSB0)

————[ cut here ]————
Badness at drivers/usb/serial/usb-serial.c:326
NIP: f701462c LR: c01af544 CTR: f70145d8
REGS: c03bbc10 TRAP: 0700 Not tainted (2.6.28.1.jcm.debugusb.090125jcm)
MSR: 00021032 CR: 28000082 XER: 00000000
TASK = c038e590[0] ’swapper‘ THREAD: c03ba000
GPR00: 00000001 c03bbcc0 c038e590 f7017ea8 f7017ec0 f7017c10 00000001 00000000
GPR08: 00000008 f7020000 0000000f 00000800 05234861 00000000 00000000 00000000
GPR16: 00000000 00000000 00000000 00000000 00000000 41400000 00000000 00000001
GPR24: eed1782b eed1792c c19b4c00 c1a6f014 eed1782b 00000001 c1a6f000 eed19400
NIP [f701462c] serial_write_room+0x54/0x84 [usbserial]
LR [c01af544] tty_write_room+0x28/0x40
Call Trace:
[c03bbcc0] [00000003] 0x3 (unreliable)
[c03bbcd0] [c01af544] tty_write_room+0x28/0x40
[c03bbce0] [c01acf7c] opost+0x20/0x1e4
[c03bbcf0] [c01aeab8] n_tty_receive_buf+0xbc4/0xe18
[c03bbda0] [c01b1afc] flush_to_ldisc+0xf4/0x17c
[c03bbdc0] [f7030618] option_indat_callback+0xc4/0x140 [option]
[c03bbde0] [f2088184] usb_hcd_giveback_urb+0xa4/0xf8 [usbcore]
[c03bbe00] [f10708c0] finish_urb+0xb8/0x118 [ohci_hcd]
[c03bbe20] [f107097c] takeback_td+0x5c/0x184 [ohci_hcd]
[c03bbe40] [f1070d74] dl_done_list+0x2d0/0x2f8 [ohci_hcd]
[c03bbe70] [f1075130] ohci_irq+0x258/0x424 [ohci_hcd]
[c03bbe90] [f208852c] usb_hcd_irq+0x4c/0xac [usbcore]
[c03bbea0] [c0061f6c] handle_IRQ_event+0x4c/0xa0
[c03bbec0] [c0063dd0] handle_fasteoi_irq+0xb0/0x104
[c03bbed0] [c0006af0] do_IRQ+0x80/0xc4
[c03bbee0] [c0015160] ret_from_except+0x0/0x1c
— Exception: 501 at cpu_idle+0x98/0xec
LR = cpu_idle+0x98/0xec
[c03bbfa0] [c00099fc] cpu_idle+0x4c/0xec (unreliable)
[c03bbfb0] [c028d9cc] __got2_end+0x58/0x68
[c03bbfc0] [c035880c] start_kernel+0x2b4/0x2c8
[c03bbff0] [0000381c] 0x381c
Instruction dump:
3c60f701 90010014 38637ea8 8009c4e0 83fe00fc 2f800000 41be000c 88df0048
4800319d 801f000c 7c000034 5400d97e 813f0000 7fc3f378 81290004
————[ cut here ]————

Ich habe die PIN dann gelöscht (mit einem Handy) und nun funktioniert es gut (2.6.28.2). Hatte das Problem nach linux-usb (at) vger.kernel.org und an den option.c Entwickler gemeldet, dort hat das aber nicht viele Interesse geerntet. .

Übrigens, bei mir macht es kein Problem das Modem erst nach dem Hochfahren einzustecken, es werden beide seriellen devices angelegt. Ich weiss nun nicht ob das an meinem neueren Kernel oder an einem anderen hal/udev/??? liegt (ich bin auf debian etch und ppc unterwegs).

Grüße,
Jörg

Kommentare sind geschlossen.