Da es in dem Dorf, in welches wir gerade ziehen, kein DSL gibt und sich die orts-ansaessige wlan-Initiative auf meine Anfragen hin nicht gemeldet hat, habe ich nun eine FlatRate bei moobicent abgeschlossen: EUR 39,99 monatlich fuer UMTS mit HSDPA (max 7,2 mbit!) - das ist doch ganz vernuenftig.
Es gibt viele Berichte, dass Moobicent Power-User auf gprs-Geschwindigkeit gedrosselt habe, diese Berichte liegen aber alle schon ueber ein halbes Jahr zurueck und Moobicent selbst beteuerte, dass das nicht von Dauer sein wird.
Wir werden sehen, was sie bei uns machen.. 50GB Traffic habe ich schon im Monat..

Aber zum Thema: Damit das Internet schoen komfortabel und sinnvoll im Haus verteilt wird, habe ich den Stick an einen Linux-Rechner angeschlossen, der nun das routing uebernimmt.

Das ist aber gar nicht so einfach: Steckt man den Stick einfach rein, erkennt Linux zwar den storage-Teil, auf dem die Windows-Treiber liegen, nicht aber den eigentlichen UMTS-Stick.
Anleitungen im Internet beschrieben, man muesse das zustaendige Modul "usbserial" entladen und manuell unter Angabe der Product- und Vendor-ID neu laden, dann ginge es.
Stimmt. Aber nur mit maximal 60kb/s und die Loesung dafuer war etwas schwieriger zu finden. Ich nehme mal an, dass das daran liegt, dass die meisten HOWTOs aus Ami-Land kommen und da haben sie es ja nicht so mit UMTS..
Die Loesung heisst: airprime + patch. Hier die komplette Anleitung:

System: Debian Etch + Backports-Kernel 2.6.22


Das Problem mit dem airprime-Modul ist, dass es in der aktuellen Version zwar super funktioniert, auch mit hohen Geschwindigkeiten, per default erkennt es aber nur zwei verschiedene Sticks und der MC950D ist keiner davon. Die Loesung ist aber denkbar einfach: Nur die Product- und Vendor-ID im sourcecode eintragen und schon rennt's.
Hierzu installieren wir ersteinmal die passenden Kernel-Header und den Quellcode:

~# apt-get install linux-headers-`uname -r` linux-source-2.6.22 build-essentials gcc
~# cd /usr/src
~# tar -jxvf linux-source-2.6.22.tar.bz2
~# cd linux-source-2.6.22/drivers/usb/serial


Nun muessen wir die Datei "airprime.c" editieren und ein paar Erweiterungen / Aenderungen vornehmen.

Ziemlich am Anfang der Datei finden wir einen Block, der aehnlich aussieht wie dieser:

static struct usb_device_id id_table [] = {
        { USB_DEVICE(0x0c88, 0x17da) }, /* Kyocera Wireless KPC650/Passport */
        { USB_DEVICE(0x413c, 0x8115) }, /* Dell Wireless HSDPA 5500 */
        { USB_DEVICE(0x0930, 0x1303) }, /* Toshiba (Novatel Wireless) HSDPA for M400 */
        { USB_DEVICE(0x106c, 0x3702) }, /* Sprint Pantech PX-500 DGE */
        { },
};


Hier muessen wir mindestens die Product- und Vendor-ID unseres Geraetes eintragen. Im Falle des MC950D waere das vendor: 0x1410 und product: 0x4400. Hier ein Beispiel fuer diesen Block mit ganz vielen verschiedenen Geraeten:

static struct usb_device_id id_table [] = {
        { USB_DEVICE(0x0c88, 0x17da) }, /* Kyocera Wireless KPC650/Passport */
        { USB_DEVICE(0x413c, 0x8115) }, /* Dell Wireless HSDPA 5500 */
        { USB_DEVICE(0x0930, 0x1303) }, /* Toshiba (Novatel Wireless) HSDPA for M400 */
        { USB_DEVICE(0x106c, 0x3702) }, /* Sprint Pantech PX-500 DGE */
        { USB_DEVICE(0xf3d0, 0×0112) }, /* AirPrime 5220 */
        { USB_DEVICE(0×1199, 0×0112) }, /* Sierra Wireless Aircard 580 */
        { USB_DEVICE(0×1199, 0×0017) }, /* Sierra Wireless EM5625 */
        { USB_DEVICE(0×1199, 0×0018) }, /* Sierra Wireless MC5720 */
        { USB_DEVICE(0×1410, 0×1110) }, /* Novatel Wireless S620 */
        { USB_DEVICE(0×1410, 0×1130) }, /* Novatel Wireless S720 */
        { USB_DEVICE(0×1410, 0×2110) }, /* Novatel Wireless U720 */
        { USB_DEVICE(0×1410, 0×1430) }, /* Novatel Merlin XU870 */
        { USB_DEVICE(0×1410, 0×1100) }, /* ExpressCard34 Qualcomm 3G CDMA */
        { USB_DEVICE(0×1410, 0×4400) }, /* Novatel MC950D */
        { USB_DEVICE(0×106c, 0×3701) }, /* Audiovox PC5740 */
        { },
};


Je nach Distribution, Kernel-Version und angewendeten Patches kann das Aussehen dieses Blockes leicht variieren, er wird aber immer gleich erweitert: Naemlich indem man einfach die Daten seines Devices anhaengt.

Jetzt kontrollieren wir noch, ob auch die Buffer-Groesse korrekt eingestellt ist. Das war sie frueher wohl nicht, scheint es aber mittlerweile per default zu sein. Egal - sicher ist sicher - wir kontrollieren:
Etwas weiter unten im Quellcode sollte eine Zeile stehen, die beginnt wie folgt:

#define URB_TRANSFER_BUFFER_SIZE


Dahinter sollte die Buffer-Groesse mit 4096 angegeben sein. Ist sie das nicht, aendern wir den Wert entsprechend ab, so dass am Ende folgendes dort steht:

#define URB_TRANSFER_BUFFER_SIZE         4096


Sollte die Zeile komplett fehlen, hast Du eine zu alte Kernel-Version gewaehlt. Hierfuer gibt es zwar auch Patches( z.B. hier), da diese aber noch fuer uralt-kernel-versionen sind, gehe ich da mal nicht naeher drauf ein...

Sind alle Aenderungen erledigt, muss das Modul noch neu compiliert werden.
Da wir die zum laufenden Kernel passenden Header und Sources verwendet haben, muss auch nicht der komplette Kernel neu compiliert werden, sondern nur das Verzeichniss in dem sich das eben geaenderte Modul befindet:

~# make -C /lib/modules/`uname -r`/build M=`pwd`


Nun noch das neu compilierte Modul dorthin packen, wo es hingehoert und die Modul-Abhaengigkeiten neu berechnen:

~# cp airprime.ko /lib/modules/`uname -r`/kernel/drivers/usb/serial/
~# depmod -a


Fertig. Nun haben wir ein Modul, welches in der Lage ist, highspeed-Verbindungen mit unserem UMTS-Stick herzustellen.

Nun sollte es noch automatisch geladen werden. Hierzu erstellen wir uns ein kleines script und eine udev-regel. Zunaechst das Script:

/usr/local/bin/start_umts_stick.sh:

#!/bin/sh

# Sicherheitshalber alle Module entladen, die faelschlicherweise geladen worden sein koennten.
# usb-storage automatisch und immer zu entfernen kann in manchen Faellen auch eine schlechte
# Idee sein.. ;)
modprobe -r usbserial
modprobe -r usb-storage

# Kurz warten
sleep 5

# Richtiges Modul laden
modproble airprime



Das Script noch ausfuehrbar machen:

~# chmod +x /usr/local/bin/start_umts_stick.sh



Und die udev-Regel:

/etc/udev/10-umtsstick.rules:

SUBSYSTEM=="usb", ATTR{idProduct}=="4400", ATTR{idVendor}=="1410", RUN+="/usr/local/bin/start_umts_stick.sh"


Fertig.
Nach dem naechsten Reboot sollte der Stick korrekt erkannt werden und es muessten folgende Devices existieren:
/dev/ttyUSB0 & /dev/ttyUSB1 - eventuell nur mehr, aber diese beiden mindestens.

An dieser Stelle hakt es bei mir auch manchmal noch - ich kenne mich wohl einfach nicht genug mit udev aus.. Meistens funktioniert es so, wie es sollte - aber eben nicht immer. Hier hat es mir immer geholfen, das script "start_umts_stick.sh" manuell auszufuehren..

Die tatsaechliche Einwahl in das UMTS-Netz erklaere ich in einem weiteren howto...

Wie immer gilt: Das hier beschriebene funktioniert fuer mich. Ich gehe mal davon aus, dass es auch fuer andere funktioniert, aber ich uebernehme keinerlei Garantie fuer gar nichts: Wenn Dein Hund hierbei stirbt: Don't blame me..! ;)

5000 Characters left