AVM Fritz CAPI Treiber unter Debian Lenny compilieren

Alle Jahre wieder kommt man in die Verlegenheit schlecht unterstützte Hardware unter Linux zum laufen zu bewegen. Ein solcher Fall sind die verschiedenen ISDN-Karten und Terminal Adapter der Fritz Serie von AVM. AVM hat irgendwann 2007 die Linux-Unterstützung aufgegeben und keine Treiber-Updates für neue Kernel released, leider sind die Treiber Closed-Source bzw. AVM wollte wohl auch nicht die weitere Entwicklung in Community Hände geben.

Im Netz findet man dazu jede Menge hilfereicher Tips und Tricks sowie Patches dazu. Doch mit jeder neuen Kernel-Gerneration kommen auch wieder neue Probleme hinzu und die alten Tricks helfen nicht mehr weiter. Und wenn man aus bestimmten Gründen nicht gleich einen kompletten Kernel samt der Fritz-Module compilieren will, dann wird es noch komplizierter. Das aktuellste was ich an gepatchen Sourcen gefunden habe, war ein Archiv für Kernel 2.6.24 und die Kanotix Distribution.

Das Problem mit der MODULE_LICENSE

Doch der erste Compilations-Versuch fand ein schnelles Ende ..

#> make
make -C /lib/modules/2.6.26-2-686/build SUBDIRS=/fritz/src modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.26-2-686'
 CC [M]  /driver/fritz/src/main.o
 CC [M]  /driver/fritz/src/driver.o
 CC [M]  /driver/fritz/src/tools.o
 CC [M]  /driver/fritz/src/tables.o
 CC [M]  /driver/fritz/src/queue.o
 CC [M]  /driver/fritz/src/lib.o
 LD [M]  /driver/fritz/src/fcusb2.o
 Building modules, stage 2.
 MODPOST 1 modules
FATAL: modpost: GPL-incompatible module fcusb2.ko uses GPL-only symbol 'usb_kill_urb'
make[2]: *** [__modpost] Fehler 1
make[1]: *** [modules] Fehler 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.26-2-686'
make: *** [fcusb2.o] Fehler 2

Ab Kernel 2.6.25 wurde einige Kernel-Funktionen für die Nutzung durch Treiber die unter keiner GPL-ähnlichen Lizenz stehen gesperrt. Man stünde also in diesem Fall im Regen, da es weder von AVM noch von den Kernel-Entwicklern Unterstützung oder Abhilfe für dieses Problem gibt. Allerdings gibt eine einfache Lösung für dieses Problem, so kann natürlich jeder eigenhängig in dem Modul-Sourcecode den String MODULE_LICENSE („Proprietary“) durch MODULE_LICENSE („GPL“) ersetzen,

Anschliessend können die Module ohne Abbruch compiliert werden. Wenn man nun noch die von einigen Modulen benötigten Firmware-Dateien nach /usr/share/isdn kopiert, lassen sich Module wie fcpci.ko oder fcusb2.ko ohne Probleme in den Kernel laden. Für eine korrekte Funktion der CAPI muss noch der entsprechende Treiber aktiviert werden. Als Beispiel aktiviere ich hier mal das Modul für eine  AVM FritzCard USB v2.1 indem folgende Zeile der Datei /etc/isdn/capi.conf hinzugefügt wird.

„fcusb2          fus3base.frm    DSS1    –       –       –       -„

Hinweis: Bei einer FritzCard USB v2.0 muss bei der Aktivierung eine andere Firmwaredatei geladen werden.

„fcusb2          fus2base.frm    DSS1    –       –       –       -„

 

Software BugDer BChannels: 0 Fehler

Allerdings zeigt sich bei einem ersten Test mittles capiinit und einem anschliessenden capiinfo das ein Bug der korrekten Funktion im Wege steht.

Number of Controllers : 1
Controller 1:
Manufacturer:
CAPI Version: 2.0
Manufacturer Version: 49.23
Serial Number: 1000001
BChannels: 0
Global Options: 0x00000000
B1 protocols support: 0x00000000
B2 protocols support: 0x00000000
B3 protocols support: 0x00000000

 0100
 0000
 00000000
 00000000
 00000000
 00000000
 00000000 00000000 00000000 00000000 00000000 00000000
 00000000 00000000 00000000 00000000 00000000

Supplementary services support: 0x000003ff
 Hold / Retrieve
 Terminal Portability
 ECT
 3PTY
 Call Forwarding
 Call Deflection
 MCID
 CCBS

Wenn capiinfo zwar den Controller anzeigt aber keine BChannels und darauf unterstützten Protokole erkennt, dann bedarf es weiterer Korrekturen. Nach etwas weiterer Recherche zeigt sich, das an einer Stelle die falsche Funktion benutzt wurde. Tauscht man daher den String  strncpy (ctrl->manu, gegen  lib_strncpy (ctrl->manu, und compliiert die Module erneut, dann ist auch dieses Problem umgangen.

Wem das jetzt zuviel Infos aufeinmal waren oder wer noch nicht so firm ist mit dem Patchen & Compilieren des Quellcodes. Der kann sich hier folgendes Bash-Script nach /usr/src herunterladen, mit „chmod 755 build_fritz_modules.sh“ ausführbar machen und schliesslich ausführen.

Downloadlink build_fritz_modules.sh

 

Unterstütze Hardware

Dank der hervorragenden Vorarbeit von den Kanotix Entwicklern werden auf diese Weise viele der Fritz ISDN-Terminal Adapter wieder unterstützt. Hier eine Liste mit Treibermodulen und der unterstützten Hardware (soweit ich das sehen konnte)

 

Modul
Hardware
fcdsl.ko AVM FRITZ!Card DSL
fcdsl2.ko AVM FRITZ!Card DSL V2.0
fcdslsl.ko AVM FRITZ!Card DSL SL
fcdslslusb.ko AVM FRITZ!Card DSL SL USB
fcdslusb.ko AVM FRITZ!Card DSL USB
fcdslusba.ko
fcpci.ko AVM FRITZ!Card PCI V2.0
fcpcmcia.ko AVM FRITZ!Card PCMCIA V2.0
fcusb.ko AVM Fritz!Card USB V1.x
fcusb2.ko AVM Fritz!Card USB V2.1 u. V2.0
fwlanusb.ko AVM Fritz!WLAN USB
fxusb.ko AVM Fritz!X USB Original
fxusb_cz.ko AVM Fritz!X USB, Teledat 120

 

Eine Garantie für die Lauffähigkeit kann ich natürlich nicht geben. Bislang habe ich persönlich lediglich die Fritzcard USB V1 und V2.1 testen können.

 

Fazit

Angesichts der fortschreitenden Entwicklung am Kernel dürften diese Patches & Tricks aber nicht mehr lange funktionieren. Da die ISDN-Terminal-Adapter von AVM (durch ihren günstigen Preis) immernoch eine hohe Verbreitung haben im deutschen Raum, sollten sich die Kernel-Entwickler Gedanken machen, ob man nicht hier einen CAPI-Treiber auf OSS-Basis entwickeln kann. Allerdings liegt es auch an AVM der Linux-Community entgegen zu kommen. Sie könnten z.B. Schnittstellen  weiter offenlegen und / oder propritären Binäre-Code zuverfügung stellen, der von einem OSS-Treiber gemantelt (eng. „wrappen“) wird, um auf den jeweils aktuellen Kernel lauffähig zu sein.

Das ist zwar nicht wirklich optimal, aber vielleicht werden auf diese Weise die treuen Anwender von Fritz-Produkten nicht gleich zum Umstieg auf Konkurrenzprodukte gezwungen. Zumal ja auch noch immer aktiv Treiber für die Fritz-Produkte entwickelt werden, wie z.B. für Window7. Vermutlich ist AVM aber eine aktive Linux-Unterstützung mit sehr vielen Kernel-Releases einfach nur zu aufwendig und zu teuer.

 

 

Links

http://kanotix.com/files/thorhammer/kanotix/non-free/avm

http://www.it-service-engel.de/index.php?id=63

http://www.panticz.de/compile_ubuntu_avm_fritz_card_usb

http://wiki.ubuntuusers.de/AVM_FRITZ!Card

http://www.heise.de/ct/artikel/Heimserver-im-Eigenbau-289186.html

10 Kommentare.

  1. Moin, wollte mich nur bedanken dein Beitrag hat hat mit heute noch beim aktualisieren auf Kernel 3.04 geholfen.

    Vielen Dank.

  2. Hallo, dein script build_fritz_modules.sh ist leider kein script, sondern ein patch ? Könntest du bitte das script online stellen, danke

    • danke für den Tip. Da muss mit den Links zu den Dateien irgendwas durcheinander geraten sein.
      Denn das Ganze besteht aus einem Patch-Datei und einer Script-Datei. Wobei das Script den Patch lädt und auf die Treiber anwendet, damit diese unter der entsprechenden Umgebung compilieren.
      Ich hab die Dateien grad nochmal gecheckt und korrigiert.

      Aber ich vermutet mal das sich das leider mit dem aktuellen Debian 6.0 „Squeeze“ erledigt hat, der Patch war noch für den Vor-Vorgänger Lenny gebaut worden !
      Von daher würde ich mich um etwas Feedback freuen, ob der Patch noch funktioniert oder ob die Sache mittlerweile obsolete ist.

      Gruß Stefan

  3. danke für die infos, die treiber wollen einfach nicht, jetzt bricht er mit der meldung ab, dass er irgendein file nicht findet… egal, ich bins langsam leid 🙁

    wie schaut das mit den hfc-karten aus, laufen die out-of-the-box inzwischen? auch mit asterisk? hab mir so ne alte teledat oder acer 128 (pci/mini usb) überlegt. die scheints recht günstig zu geben und langsam bräucht ich den ab und das fax 😉

    • Hi clockwork,
      also mit den HFC-Karten bin ichs zufrieden, jedenfalls ist das kein so wildes rumgepatche oder compilieren wie bei den Fritz !-Sachen.
      Ganz zu schweigen von den Jitter oder Echo Problemen die ich ab und an mit den Fritz Teilen hatte. Da man die HFC-Karten auch mit DAHDI-Treibern unter Asterisk zum Laufen bringt, ist die Einbindung nun echt sorgenfrei. Und darüberhinaus kann man nun sogar auch mal ordentlich NT- oder TE-Modus an den ISDN-Ports konfigurieren.

      Persönlich finde ich das mit DAHDI endlich so Schnittstellen wie CAPI oder MISDN in Rente geschickt hat, die braucht nun kein Mensch mehr.
      Gruß Stefan

      • Ich verwende die Fritzcard nur noch zum Faxen, sonst hätte ich sie schon längst entsorgt. Könnte ich mit HFC-Karten ebenfalls faxen (z. B. mittels Hylafax). Welche könntest Du dafür empfehlen (ideal: PCI und/oder USB)?
        Joo

        • Mit den HFC-Karten ist das Faxen genauso möglich wie mit den Fritz-Karten. In viele Asterisk-basierende VoIP-Lösungen ist bereits HylaFAX integriert und läuft ohne Probleme.
          Was Stabilität (als auch Sprachqualität) anbelangt, so kann ich nur PCI-Karten empfehlen. ISDN-Adapter für USB laufen prinzipiell auch, bringen aber Timingprobleme mit sich. Und wenn man dann eine solche USB-Lösung in eine virtuelle Maschine verfrachtet, kann das im Extremfall dazu führen, das die Probleme so stark werden das keine Analog-FAX-Kommuniktaion mehr zu stande kommt.

  4. heyho!

    super sache, dass du das zum laufen bekommen hast, ich hätt etz nur eine frage:

    das „Proprietary“ hab ich gefunden und ersetzt, aber das „strncpy (ctrl->manu“ finde ich nicht.

    wär super, wenn du mir die stelle verraten könntest, denne findet er das nächste mal hoffentlich die zwei b-channels und ich kann die box endlich mal benutzen…

    soweit schonmal vielen dank!

    o/