ubuntuusers.de

HOWTO: AVM Fritz Card DSL SL (PCI) unter Karmic (9.10)

Status: Gelöst | Ubuntu-Version: Ubuntu 9.10 (Karmic Koala)
Antworten |

rdratlos

Anmeldungsdatum:
28. Dezember 2007

Beiträge: Zähle...

Als ich gestern Jaunty auf Karmic aktualisierte, stellte ich erschrocken fest, dass weitere Anpassungen von Kernel-Funktionen dazu geführt haben, dass die Anleitung von der_Alex1980 (http://forum.ubuntuusers.de/topic/howto-avm-fritz-card-dsl-pci-unter-interprid-/) unter Ubuntu 9.10. (Karmic Koala) nicht mehr funktioniert. Ich habe sie deshalb kopiert und überarbeitet und neu ins Forum eingestellt. Damit auch die Besitzer einer amd64-Umgebung mal zu ihrem Recht kommen, beziehen sich die Links auf diese Architektur.

Zunächst müssen alle CAPI Pakete wie im Wiki beschrieben installiert werden, als da wären: libcapi20-dev, libcapi20-3, capiutils, pppdcapiplugin, drdsl. Diese Pakete sind auch auf der Desktop-Installations-CD zu finden.

Nun benötigen wir den Treiber-Quellcode und die Firmware. Beide ziehen wir uns an einem internetfähigen PC aus dem Hardy-Repository auf einen USB Stick und kopieren sie dann ins Home Verzeichnis.

Firmware http://de.archive.ubuntu.com/ubuntu/pool/restricted/l/linux-restricted-modules-2.6.24/avm-fritz-firmware-2.6.24-25_3.11+2.6.24.18-25.2_amd64.deb

Treiber http://de.archive.ubuntu.com/ubuntu/pool/restricted/l/linux-restricted-modules-2.6.24/avm-fritz-kernel-source_3.11+2.6.24.18-25.2_amd64.deb

Die Firmware wird ganz normal per dpkg installiert.

Wir holen uns dauerhaft root Rechte, damit wir uns das 'sudo' vor jedem Befehl sparen...

1
rdratlos@nero:~/fritz$ sudo -s

Installieren der Fritz Firmware...

1
root@nero:~/fritz# dpkg -i avm-fritz-firmware-2.6.24-25_3.11+2.6.24.18-25.2_amd64.deb 

Damit das CAPI-System die Firmware findet, müssen noch einige Dinge geändert werden. Zum einen muss in der Datei /etc/isdn/capi.conf die Auskommentierung für die entsprechende Karte entfernt werden. Bei der Fritz Card DSL SL heißt das Treibermodul fcdslsl bzw. bei der normalen Fritz Card DSL (Achtung: in einer 64-bit Architektur wird nur die Version 2.0 unterstützt!) fcdsl2.

# card          file            proto   io      irq     mem     cardnr  options
fcdslsl         fdssbase.bin    DSS1    -       -       -       -
# card          file            proto   io      irq     mem     cardnr  options
fcdsl2          fds2base.bin    DSS1    -       -       -       -

Mehr Infos dazu auch im Wiki

Die Firmware selbst befindet sich in einem Unterverzeichnis von /usr/share/isdn (in unserem Fall 2.6.24-25). Um vom Kernel gefunden zu werden, muss noch ein symbolischer Link mit dem aktuellen Kernelbezeichner auf dieses Verzeichnis gesetzt werden...

1
root@nero:/usr/share/isdn# ln -s 2.6.24-25 `uname -r`

Kompilieren und Installieren des Treibers

Da das avm-kernel-source Paket einige Abhängigkeiten besitzt, die nicht erfüllt sind, wollen wir es nicht installieren, sondern nur entpacken.

1
2
3
4
root@nero:~/fritz# dpkg -x avm-fritz-kernel-source_3.11+2.6.24.18-25.2_amd64.deb .
root@nero:~/fritz# cp ./usr/src/avm-fritz.tgz /usr/src
root@nero:~/fritz# cd /usr/src
root@nero:/usr/src# tar -xzvf avm-fritz.tgz

Wir wechseln ins Verzeichnis /usr/src/fritz/fcdslsl. Wenn wir jetzt 'make' aufrufen bekommen wir einen Fehler, weil sich die Kernel-Schnittstellen geändert haben.

/usr/src/fritz/fcdsl/src/driver.c:1401: Fehler: Implizite Deklaration der Funktion »find_task_by_pid«

Laut dieser Diskussion in der LKML ist die Funktion nicht mehr zuverlässig und sollte durch find_task_by_vpid() ersetzt werden. Dies haben wir auch gemäß Anleitung von der_Alex1980 bis jaunty erfolgreich gemacht. In karmic ist auch diese Kernel-Funktion verschwunden. Bis sich mal ein netter Kernel-Entwickler findet, der das Thread-Handling des Treibers für die aktuellen Kernelversionen umschreibt, bleibt keine Chance als ganz auf diese Funktion zu verzichten. Die Verwendung der Kernel-Funktion pid_task wie für fglrx vorgeschlagen, führt zum Absturz von capiinit. Also kommentieren wir in der Datei driver.c alle Vorkommen (bei fcdslsl drei) von find_task_by_pid aus.

...
static void exit_debug_buffer (dbg_buf_p dbp) {
	
	assert (dbp != NULL);
//	info (find_task_by_pid (dbp->pid) != NULL);
	LOG("Stopping debug thread...\n");
	atomic_set (&dbp->stop, 1);
//	find_task_by_pid not supported anymore by kernel
//	if (find_task_by_pid (dbp->pid)) {
		wake_up_interruptible (&dbg_wait);
//	} else {
//		hfree (dbp);
//	}
} /* exit_debug_buffer */

...

static void kill_thread (void) {

	atomic_set (&thread_flag, 0);
//	if (NULL == find_task_by_pid (thread_pid)) {
//		LOG("Thread[%d] has died before!\n", thread_pid);
//	} else {
		if (!atomic_read (&thread_capi_flag)) {
			SCHED_WAKEUP_CAPI;
		} else {
			SCHED_WAKEUP;
		}
		LOG("Thread signalled, waiting for termination...\n");
		wait_for_completion(&thread_sync); /* Wait for complete Thread Sync <arnd.feldmueller@web.de> */
		#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
		down (&thread_sync);
		#endif
		LOG("Thread[%d] terminated.\n", thread_pid);
//	}
	thread_pid = -1;
} /* kill_thread */
...

Weiterhin wurde die Kernel-Funktion capi_ctr_reseted in capi_ctr_down umbenannt. Also ersetzen wir in der Datei driver.c alle Vorkommen (bei fcdslsl zwei) von capi_ctr_reseted durch capi_ctr_down. Jetzt sollte der Treiber fehlerfrei kompiliert und gebaut werden können.

Also ...

1
2
3
4
5
6
7
root@nero:/usr/src/fritz/fcdslsl# make clean
root@nero:/usr/src/fritz/fcdslsl# make 
root@nero:/usr/src/fritz/fcdslsl# make install
root@nero:/usr/src/fritz/fcdslsl# depmod -a
root@nero:/usr/src/fritz/fcdslsl# modprobe fcdslsl
root@nero:/usr/src/fritz/fcdslsl# capiinit
root@nero:/usr/src/fritz/fcdslsl# drdsl

Nach dem Ausführen von make install befindet sich der Treiber im Unterverzeichnis extra des Module-Directory (/lib/modules/uname -r/extra).

Nun noch den Internetzugang wie im Wiki beschrieben einrichten

Diese Anleitung funktioniert für die Fritz Card DSL SL (fcdslsl) unter Karmic. Sie sollte auch auf die Variante V2 und die Fritz Caed DSL anwendbar sein. Vielleicht posted ja jemand die entsprechende Erfolgsmeldung.

Nachdem auch ich kein DKMS-Experte bin, abschließend noch der Hinweis, dass nach jedem Kernel-Update folgende Schritte mit Root-Rechten ausgeführt werden müssen:

1
2
3
4
5
6
7
8
9
root@nero:/usr/share/isdn# ln -s 2.6.24-25 `uname -r`
root@nero:/usr/share/isdn# cd /usr/src/fritz/fcdslsl
root@nero:/usr/src/fritz/fcdslsl# make clean
root@nero:/usr/src/fritz/fcdslsl# make 
root@nero:/usr/src/fritz/fcdslsl# make install
root@nero:/usr/src/fritz/fcdslsl# depmod -a
root@nero:/usr/src/fritz/fcdslsl# modprobe fcdslsl
root@nero:/usr/src/fritz/fcdslsl# capiinit
root@nero:/usr/src/fritz/fcdslsl# drdsl

Viel Erfolg!

avm-fritz-kernel-source_3.11+2.6.24.18-25.2_amd64.diff (1.7 KiB)
Patch file for patching the avm sources
Download avm-fritz-kernel-source_3.11+2.6.24.18-25.2_amd64.diff

axt

Anmeldungsdatum:
22. November 2006

Beiträge: 34254

rdratlos schrieb:

Ich habe sie deshalb kopiert und überarbeitet und neu ins Forum eingestellt.

Wäre nicht ein Wiki-Artikel bzw. die Anpassung eines solchen sinnvoller?

damasel

Avatar von damasel

Anmeldungsdatum:
10. Juni 2007

Beiträge: 23

Wohnort: Schweinfurt

der obere Link zur Datei ist nicht mehr gültig. ich die hier genommen und es läuft mit Ubuntu 10.04. Danke für die Infos.

http://ftp.tugraz.at/mirror/ubuntu/pool/restricted/l/linux-restricted-modules-2.6.24/avm-fritz-kernel-source_3.11+2.6.24.18-28.6_amd64.deb

Antworten |