Fritz Card PCI (fcpci) Linux Howto

Das Modul fcpci für die FRITZ!Card PCI(archive.org) FRITZ!Card PCI(Aktuell) lässt sich im Originalquelltext nicht mehr mit neueren Kerneln compilieren.
Der Grund dafür ist der ausgelaufene Support des Herstellers, der sich seit einiger Zeit nicht mehr um dieses Produkt kümmert:

This software has reached the "End of maitenance state (EOM) 
and will be not longer supported by AVM (End of support state - EOS)

Sehr informativ in diesem Zusammenhang ist auch die Übersicht der unterstützten AVM-Controller von AVM.
Als sich Novell 2006 entschloss nur noch freie Treiber in ihre neue Betriebssystemversion zu integrieren war es für AVM nicht mehr möglich direkt mit Suse Linux ausgeliefert zu werden. Eine Pflege und Anpassung der Treiber auf immer neue Kernelversionen erschien AVM scheinbar als zu aufwendig, was ich ehrlich gesagt verstehe: Die Leute wollen ja auch Geld verdienen. So eine Pflege bringt keine neuen Nutzer, schon gar nicht für ausgelaufene Produkte.

Wie auch immer, da der Hersteller keine aktuellen Versionen mehr anbietet, gibt es deshalb hier eine gepachte Version.

Diese gepachte Version arbeitet mit allen Kerneln ab 2.6.18, sehr warscheinlich auch früheren Kerneln zusammen. Laut den Rückmeldungen scheint mein Patch recht gut zu funktionieren: Ich habe beginnend mit Kernel 2.6.22 bis hin zu aktuellen Kerneln ausschließlich erfolgreiche Rückmeldungen. Die aktuellste erfolgreiche Rückmeldung ist zu Kernel 3.12.

Die hier angebotenen Quellen werden besonders gerne mit Debian, Ubuntu und Gentoo eingesetzt. Andere Versionen werden auch problemlos funktionieren, die Quellen von hier sind unabhängig von Eigenheiten einer Distribution. Für Nutzer von ArchLinux oder OpenSUSE gibt es jedoch eigene Pakete, diese sollten im Zweifel auch genutzt werden: Mehr dazu in den Links am Ende der Seite.

Ich kann nicht jede mögliche Kernelversion durchtesten, deshalb bin ich auf Deine Rückmeldung angewiesen.
Wenn Du mein fcpci Modul einsetzt bitte ich Dich um eine kurze Mail. Bitte schreibe mir ob alles funktioniert, mit Angabe der Kernelversion und einem Auszug von dmesg.Wenn Du interressante Seiten im Netz zum Thema findest oder vielleicht selbst eine Anleitung geschrieben hast: Bitte sende mir eine Mail, damit ich die Seite hier informativ und aktuell halten kann.

Bitte keine Mails nach dem Motto "Hey mach mal endlich xyz fertig". Ich pflege diese Seiten nur und ausschließlich aus Spaß an der Freude in meiner Freizeit. Wenn Du etwas von mir in einer bestimmten Zeit erwartest dann bezahle mich einfach dafür. Oder noch besser, kaufe bitte nur Hardware für die auch freie Treiber existieren. Diesen Absatz hätte ich wirklich gerne nie schreiben wollen, leider ist es nötig.

Anleitung zum Compilieren des Kernelmoduls fcpci

Der übliche Spruch vorneweg:
Natürlich seid Ihr selbst für Eure Kiste verantwortlich. Das folgende hat mit den Sourcen der Herstellerfirma nicht mehr viel gemein, die Quellen sind gepacht. Weder ich noch die Herstellerfirma übernehmen irgendeine Garantie. Ich übernehme keinen Support.

Quellen findest Du unter https://belug.de/~lutz/pub/fcpci/

Bitte benutze die Version, die am besten zu Deinem Kernel passt. Solltest Du kein genau passendes Paket fuer Deinen Kernel finden, so versuche bitte das nächst tiefere Quellpaket: fuer Kernel 2.6.32 funktioniert das Quellpaket fuer 2.6.31 tadellos, jedoch NICHT das Quellpaket fuer Kernel 2.6.34.

Die Anleitung hier auf der Webseite bezieht sich auf Kernel 2.6.25, funktioniert aber prinzipiell fast genau so mit neueren Kernelversionen: Passe bitte einfach die Pfade an.

Du findest im Quellpaket eine Hilfedatei, die immer angepasst und aktuell gehalten wird. Diese Datei also immer lesen!

Anleitung: (Kernel 2.6.25 bis 2.6.32)

  • tar entpacken
  • ins verzeichnis fritz_2.6.25.4/lib gehen, je nach Betriebssystem (32 oder 64 bit) die Datei fcpci-lib.o linken.

Bei einem 32-bit System sieht das bsp. so aus:

box:/usr/src/fritz_2.6.25.4/lib# ls -l
insgesamt 1388
 -rwx------ 1 root root 581653 2008-04-28 17:14 32_fcpci-lib.o
 -rw-r--r-- 1 root root 823752 2008-05-20 14:21 64_fcpci-lib.o
 lrwxrwxrwx 1 root root     14 2008-05-20 14:36 fcpci-lib.o -> 32_fcpci-lib.o

Für ein 64-bit System einfach ändern:

ln -s 64_fcpci-lib.o fcpci-lib.o

dann ins Verzeichnis fritz_2.6.25.4/fcpci-3.11.07 wechseln und:

make clean
make all

Das sollte dann so aussehen:

box:/usr/src/fritz_2.6.25.4/fcpci-3.11.07# make
make -C /lib/modules/2.6.25.4/build SUBDIRS=/usr/src/fritz_2.6.25.4/fcpci-3.11.07 modules
make[1]: Entering directory `/usr/src/linux-2.6.25.4'
  LD [M]  /usr/src/fritz_2.6.25.4/fcpci-3.11.07/fcpci.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /usr/src/fritz_2.6.25.4/fcpci-3.11.07/fcpci.mod.o
  LD [M]  /usr/src/fritz_2.6.25.4/fcpci-3.11.07/fcpci.ko
make[1]: Leaving directory `/usr/src/linux-2.6.25.4'

wenn das Modul sauber gebaut wurde ein extra Verzeichnis anlegen:

mkdir /lib/modules/`uname -r`/kernel/extras
cp fcpci.ko /lib/modules/`uname -r`/kernel/extras
depmod -a

Dann das Modul laden und kontrollieren, ob alles funktioniert:

box:~# modprobe -r fcpci
box:~# modprobe fcpci
box:~# dmesg
...
fcpci: Driver 'fcpci' detached
fcpci: AVM FRITZ!Card PCI driver, revision 0.7.2
fcpci: (fcpci built on May 20 2008 at 14:25:05)
fcpci: -- 64 bit CAPI driver --
fcpci: AVM FRITZ!Card PCI found: port 0xe880, irq 18
fcpci: Loading...
fcpci: Driver 'fcpci' attached to fcpci-stack. (304)
fcpci: Stack version 3.11-07
kcapi: Controller [001]: fcpci-e880-18 attached
kcapi: card [001] "fcpci-e880-18" ready.
fcpci: Loaded.

Anleitung: (ab Kernel 2.6.34)

Ab Kernel 2.6.34 wurde der make-Prozess vereinfacht. Es genügt nun folgendes:

aptitude install linux-headers-amd64 make gcc ...

wget https://belug.de/~lutz/pub/fcpci/fritz-fcpci-2.6.34.tar.bz2
tar xjf fritz-fcpci-2.6.34.tar.bz2
cd fritz-fcpci-2.6.34/src
make clean
make all
make install

modprobe -r fcpci
modprobe -v fcpci

Optional: ab Kernel 2.6.39 mit dkms

Ab Kernel 2.6.39 kann auch optional mit dkms installiert werden. Die Idee dazu habe ich von wiki.ubuntuusers.de. Die Quellen können natürlich auch wie bisher (ab 2.6.34 gezeigt mit der normalen Methode: make, make install) installiert werden.

Möchte man dkms benutzen dazu folgendes als root ausführen:

aptitude install linux-headers-amd64 dkms
cd /usr/src/
wget https://belug.de/~lutz/pub/fcpci/fritz-fcpci-2.6.39.tar.bz2
tar xjf fritz-fcpci-2.6.39.tar.bz2
dkms add -m fcpci -v 2.6.39
dkms build -m fcpci -v 2.6.39

Bisher hatte ich dkms nicht verwendet, habe also noch wenig Wissen dazu. Deshalb wie immer, über Rückmeldung zur Funktion oder Verbesserungsvorschläge wäre ich sehr dankbar. Die Idee hinter dkms hat mich jedoch überzeugt, weshalb ich mich entschlossen habe dies in Zukunft zu verwenden.

Probleme und Lösungen

Folgend einige Lösungen zu Problemen im Zusammenhang mit fcpci. Solltest Du Probleme haben die hier nicht beschrieben sind schreibe bitte eine Mail: lutz.willek(at)belug.de

Das Modul kann nicht geladen werden (Device or resource busy)

Das Modul wird ohne Fehler compiliert, lässt sich jedoch nicht laden. Es erscheinen folgende Fehlermeldungen:

(FATAL: Error inserting fcpci
(/lib/modules/2.6.32-5-486/kernel/extras/fcpci.ko): Device or resource busy)

Alles ist gut: Du hast nur noch Module geladen die auf Deine Karte zugreifen. Diese müssen entladen werden, bevor fcpci geladen werden kann.

Oft sind die Module avmfritz oder mISDNipac dafür verantwortlich. Bitte schaue mit "lsmod" nach welche Module geladen sind und entferne diese. Dauerhaft kann man die Module mittels Blacklist am laden hindern, einfach folgendes am Ende der Datei anhängen:

/etc/modprobe.d/blacklist.conf

blacklist mISDNipac
blacklist avmfritz

Das Modul kann nicht geladen werden (fcpci: Unknown symbol)

Das Modul wird ohne Fehler compiliert, lässt sich jedoch nicht laden. Mit dmesg sieht man folgende Fehlermeldungen:

fcpci: Unknown symbol capilib_data_b3_conf (err 0)
fcpci: Unknown symbol detach_capi_ctr (err 0)
fcpci: Unknown symbol capilib_data_b3_req (err 0)
fcpci: Unknown symbol capi_ctr_ready (err 0)
fcpci: Unknown symbol unregister_capi_driver (err 0)
fcpci: Unknown symbol capi_ctr_down (err 0)
fcpci: Unknown symbol capi_ctr_handle_message (err 0)
fcpci: Unknown symbol capilib_free_ncci (err 0)
fcpci: Unknown symbol capilib_release_appl (err 0)
fcpci: Unknown symbol register_capi_driver (err 0)
fcpci: Unknown symbol capilib_new_ncci (err 0)
fcpci: Unknown symbol attach_capi_ctr (err 0)

Du verwendest einen eigenen Kernel? Die Module für capi müssen wie bisher compiliert werden, damit fcpci funktioniert. In Distributionskerneln ist dies der Fall, bei einem eigenen Kernel muss das konfiguriert werden. Hier ein kleiner Auszug aus der .config dazu:

CONFIG_ISDN_CAPI=m
  CONFIG_ISDN_CAPI_CAPI20=m
  CONFIG_ISDN_CAPI_CAPIDRV=m

Du verwendest das originale Kernelmodul, nicht die gepachte Version mit einem 64 bit-Kernel

Das Modul fcpci funktioniert ohne weiteres nicht mit einem 64-bit Kernel, es erscheint folgende Fehlermeldung:

ld: Relocatable linking with relocations from format elf32-i386 (/var/lib/fritz/fcpci-lib.o) to format elf64-x86-64 (/usr/src/fritz_2.6.25.4/fcpci-3.11.07/fcpci.o) is not supported

oder bei älteren Patchleveln:

fcpci/src/main.c:367: error: implicit declaration of function ‘pci_module_init’

Warum steht das hier? Damit Du über Suchmaschinen diese Seite findest. Bitte versuche es noch einmal mit meinen Quellen.

fcpci-lib.o format elf32-i386 is not supported

per Email am 15.08.2008:

Leider funktioniert das bei mir unter Lenny nicht so, wie gehofft, Kernel 2.6.25-2-686. Was habe ich falsch gemacht?

zeus:/treiber/capi/v4/fritz_2.6.25.4/fcpci-3.11.07# make clean
 rm -f main.o driver.o tools.o tables.o queue.o lib.o
 rm -f fcpci.o fcpci.ko
 zeus:/treiber/capi/v4/fritz_2.6.25.4/fcpci-3.11.07# make all
 make -C /lib/modules/2.6.25-2-686/build
 SUBDIRS=/treiber/capi/v4/fritz_2.6.25.4/fcpci-3.11.07 modules
 make[1]: Entering directory `/usr/src/linux-headers-2.6.25-2-686'
 CC [M] /treiber/capi/v4/fritz_2.6.25.4/fcpci-3.11.07/main.o
 CC [M] /treiber/capi/v4/fritz_2.6.25.4/fcpci-3.11.07/driver.o
 CC [M] /treiber/capi/v4/fritz_2.6.25.4/fcpci-3.11.07/tools.o
 CC [M] /treiber/capi/v4/fritz_2.6.25.4/fcpci-3.11.07/tables.o
 CC [M] /treiber/capi/v4/fritz_2.6.25.4/fcpci-3.11.07/queue.o
 CC [M] /treiber/capi/v4/fritz_2.6.25.4/fcpci-3.11.07/lib.o
 LD [M] /treiber/capi/v4/fritz_2.6.25.4/fcpci-3.11.07/fcpci.o
 ld: Relocatable linking with relocations from format elf64-x86-64
 (/var/lib/fritz/fcpci-lib.o) to format elf32-i386) (/treiber/capi/v4/fritz_2.6.25.4/fcpci-3.11.07/fcpci.o) is not supported
 make[2]: *** [/treiber/capi/v4/fritz_2.6.25.4/fcpci-3.11.07/fcpci.o] Fehler 1
 make[1]: *** [_module_/treiber/capi/v4/fritz_2.6.25.4/fcpci-3.11.07] Fehler 2
 make[1]: Leaving directory `/usr/src/linux-headers-2.6.25-2-686'
 make: *** [fcpci.ko] Fehler 2

Ich glaube Sie haben vergessen, die 32-bit Variante zu linken, siehe Anleitung auf der Webseite:

    ins verzeichnis fritz_2.6.25.4/lib gehen,
    je nach Betriebssystem (32 oder 64 bit) die Datei fcpci-lib.o linken.

per Email am xx.xx.2008:

Ich habe nochmals alle Schritte nachvollzogen, vom Download, Entpacken usw.. Jedesmal vorher gelöscht.
Dabei ist mir aufgefallen, dass im Verzeichnis ....2.6.25.4/lib ein 0-bit-Link fcpci-lib.o mitgeliefert wird.

Ich habe also vor dem ln -s 32_fcpci-lib.o fcpci-lib.o> das vorhandene fcpci-lib.o gelöscht und
dann erst weiter gemacht. Damit ging es dann nach einem Neustart des Rechners. Super.

Kernel: Kein CAPIFS ab Kernel 2.6.38

Ab Kernel 2.6.38 wurde CAPIFS aus dem Kernel entfernt. Dies hat jedoch keine Auswirkungen auf fcpci, das Modul funktioniert weiterhin wie gewohnt. Jedoch funktioniert momentan capiutils unter Debian nicht mehr ohne weiteres, da dort Abhängigkeiten zum Kernelmodul capifs besteht. Dies lässt sich leicht durch manuelles Nacharbeiten beheben, da nur das initscript betroffen ist, nicht die capiutils selbst. (Update: Debian hat das Problem inzwischen in den aktuellen isdnutils behoben, Ubuntu zieht sicher bald nach, in der Zwischenzeit einfach den Patch im oben verlinkten Bugreport selbst anwenden)

Links

Mehr zum Thema erfahrt Ihr unter folgenden Links:

Die Linuxseiten von AVM

Die offiziellen Treiber von AVM (FTP-Link)

Pakete, mehr Pakete plus Howto und ein Forum (Link zu archive.org) zu fcpci und Suse Linux

Einige Howto's rund um das Thema FCPCI

HOWTO zu fcpci unter Ubuntu (allgemeines Wiki)

HOWTO zu Ubuntu (10.04)

HOWTO Fax/Anrufbeantworter (CapiSuite) - EasyLinux 2/2007

HOWTO Linux als ISDN-Telefon - Pro-Linux 11/2010

Mehrere Karten gleichzeitig betreiben: Anleitung für Kernel 2.4 und etwas neuer für Kernel 2.6