Montag, 13. August 2007

Vodafone 3G Karte und Fedora 7

Ich habe heute eine GlobeTrotter 3G+ GPRS/EDGE UMTS/HSDPA Cardbus Card unter Linux installiert.
Ging eigentlich recht einfach :-)

Hier meine Schritte:

- Open Source Treiber herunterladen (Nozomi Treiber)
- Sourcen entpacken

Seit Kernel 2.6.22 wurde die Funktion pci_module_init durch pci_register_driver ersetzt. Deshalb habe ich einen kleinen Patch erstellt der das in den Sourcen ändert. Den Patch gibt es unter:
Nozomi Fedora 7 Patch
Nozomi Fedora 7 Patch für x86_64 (untested)

Oder hier via Copy and Past:

x86 Version

--- nozomi.c_ori 2007-08-13 09:10:25.000000000 +0200
+++ nozomi.c 2007-08-13 09:13:18.000000000 +0200
@@ -1733,7 +1733,7 @@
BUG_ON(!dc->tty_flip_wq);
return -ENOMEM;
}
- INIT_WORK(&dc->tty_flip_wq_struct, tty_flip_queue_function, dc);
+ INIT_WORK(&dc->tty_flip_wq_struct, tty_flip_queue_function);
#endif
spin_lock_init(&dc->spin_mutex);
make_proc_dirs();
@@ -2393,7 +2393,7 @@
{
int rval = 0;

- rval = pci_module_init(&nozomi_driver);
+ rval = pci_register_driver(&nozomi_driver);
printk(KERN_INFO "Initializing %s\n", VERSION_STRING);
return rval;
}


x86_64 Version (untested)

--- nozomi.c_ori 2007-08-13 09:10:25.000000000 +0200
+++ nozomi.c 2007-11-30 12:05:02.000000000 +0100
@@ -1686,7 +1686,7 @@
ret = -ENODEV;
goto err_disable_device;
}
- dc->base_addr = (void *)ioremap((int)dc->base_addr, dc->card_type);
+ dc->base_addr = (void *)ioremap((u64)dc->base_addr, dc->card_type);
if (!dc->base_addr) {
dev_err(&pdev->dev, "No I/O-Address for card detected\n");
ret = -ENODEV;
@@ -1733,7 +1733,7 @@
BUG_ON(!dc->tty_flip_wq);
return -ENOMEM;
}
- INIT_WORK(&dc->tty_flip_wq_struct, tty_flip_queue_function, dc);
+ INIT_WORK(&dc->tty_flip_wq_struct, tty_flip_queue_function);
#endif
spin_lock_init(&dc->spin_mutex);
make_proc_dirs();
@@ -2393,7 +2393,7 @@
{
int rval = 0;

- rval = pci_module_init(&nozomi_driver);
+ rval = pci_register_driver(&nozomi_driver);
printk(KERN_INFO "Initializing %s\n", VERSION_STRING);
return rval;
}


- Patch anweden (patch -p0 < nozomi_fedora7.patch)
- Kernel Module kompilieren (make)
- Kernel Module als root (su -) installieren (make install)

Mit modprobe nozomi kann das Kernel Module jetzt geladen werden. Danach sollten die Devices /dev/noz0 bis /dev/noz3 erstellt worden sein. Das Karte kann jetzt via /dev/noz0 angesprochen werden.

Ich habe ausserdem noch folgendes in meine /etc/rc.local eingtragen:

modprobe nozomi
ln -si /dev/noz0 /dev/modem

Dadurch wird beim Systemstart automatisch das Module geladen. Ausserdem wird /dev/noz0 nach /dev/modem gelinkt, da ich kppp als Dialer verwende.

4 Kommentare:

snoopy26 hat gesagt…

The patch works fine for me: 2.6.23.1-21.fc7
Thank you!

but please change (int) to (u64) for x86_64:
dc->base_addr = (void *)ioremap((int)dc->base_addr, dc->card_type);
dc->base_addr = (void *)ioremap((u64)dc->base_addr, dc->card_type);

Patrick hat gesagt…

hi snoopy26,

thanks for your infos. i have added a 64bit version. but the patch is untested.

snoopy26 hat gesagt…

I've tested the patch on a Lifebook E8110
with 2.6.23.8-63.fc8-x86_64 and 2.6.23.1-21.fc7-x86_64.
Thanks again.

Patrick hat gesagt…

nice to hear, thanks for testing