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 thoughts on “BASE-UMTS-Flatrate mit Huawei E220 unter Gentoo Linux

  1. The used modem type is “analog modem”. Does this mean you cannot use UMTS? Then this connection would be incredibly slow. Is it?

  2. 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

  3. 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.

  4. 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.

  5. 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=0×1003″ 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

  6. 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

  7. 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+0×54/0×84 [usbserial]
    LR [c01af544] tty_write_room+0×28/0×40
    Call Trace:
    [c03bbcc0] [00000003] 0×3 (unreliable)
    [c03bbcd0] [c01af544] tty_write_room+0×28/0×40
    [c03bbce0] [c01acf7c] opost+0×20/0x1e4
    [c03bbcf0] [c01aeab8] n_tty_receive_buf+0xbc4/0xe18
    [c03bbda0] [c01b1afc] flush_to_ldisc+0xf4/0x17c
    [c03bbdc0] [f7030618] option_indat_callback+0xc4/0×140 [option]
    [c03bbde0] [f2088184] usb_hcd_giveback_urb+0xa4/0xf8 [usbcore]
    [c03bbe00] [f10708c0] finish_urb+0xb8/0×118 [ohci_hcd]
    [c03bbe20] [f107097c] takeback_td+0x5c/0×184 [ohci_hcd]
    [c03bbe40] [f1070d74] dl_done_list+0x2d0/0x2f8 [ohci_hcd]
    [c03bbe70] [f1075130] ohci_irq+0×258/0×424 [ohci_hcd]
    [c03bbe90] [f208852c] usb_hcd_irq+0x4c/0xac [usbcore]
    [c03bbea0] [c0061f6c] handle_IRQ_event+0x4c/0xa0
    [c03bbec0] [c0063dd0] handle_fasteoi_irq+0xb0/0×104
    [c03bbed0] [c0006af0] do_IRQ+0×80/0xc4
    [c03bbee0] [c0015160] ret_from_except+0×0/0x1c
    — Exception: 501 at cpu_idle+0×98/0xec
    LR = cpu_idle+0×98/0xec
    [c03bbfa0] [c00099fc] cpu_idle+0x4c/0xec (unreliable)
    [c03bbfb0] [c028d9cc] __got2_end+0×58/0×68
    [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

  8. Pingback: WarrenFaith - Senseless » KDE 4.2 läuft und wird doch abgeschafft - samt Gentoo

  9. Pingback: Alex’ Blog » Blog Archive » Fonic UMTS (Huawei E160) mit Linux

  10. Pingback: N24 Surfstick mit Gentoo | FUKZ.DE

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>