{"id":295,"date":"2010-08-07T08:43:19","date_gmt":"2010-08-07T07:43:19","guid":{"rendered":"http:\/\/blog.schmoigl-online.de\/?p=295"},"modified":"2010-08-07T20:46:14","modified_gmt":"2010-08-07T19:46:14","slug":"fedora-core-und-die-avm-fritz-card-isdn-adapter","status":"publish","type":"post","link":"http:\/\/blog.schmoigl-online.de\/?p=295","title":{"rendered":"Fedora Core und die AVM Fritz Card ISDN Adapter"},"content":{"rendered":"<p>Ausnahmsweise schreibe ich diesen Blogeintrag mal in deutscher Sprache, denn er wird sich um die Besonderheiten, die sich mit der Verwendung der allseits (besonders im deutschen Sprachraum) beliebten AVM-Fritzcard Adapter unter Fedora Linux, befassen. Dabei werde ich allerdings nicht nur auf die Installationsschwierigkeiten des CAPI-Treibers eingehen, sondern auch beschreiben, wie die &#8220;alten&#8221; isdn4kutils zum Laufen gebracht werden k\u00f6nnen.<br \/>\n<!--more--><\/p>\n<h4>CAPI mit Hindernissen<\/h4>\n<p>Bis zur Version 9.3 (offiziell bis 9.0) der Distribution Suse leistete der Hersteller, <a href=\"http:\/\/www.avm.de\">AVM GmbH<\/a>, direkten Support. Da ISDN-Kartentreiber im Wesentlichen direkt in den Kernel geladen werden m\u00fcssen, k\u00f6nnen die von AVM immer noch auf <a HREF=\"ftp:\/\/ftp.avm.de\/cardware\/fritzcrd\/linux\/\">ihrem FTP-Server<\/a> zur Verf\u00fcgung gestellten Versionen nicht mehr auf aktuelle Kernels angewandt werden. Das Paket, das man sich vom Server herunterladen kann, enth\u00e4lt einen quelloffenen Teil, der f\u00fcr die Schnittstelle zwischen Kernel und Hardwarezugriff zust\u00e4ndig ist und einen Closed-Sourceanteil, der im Wesentlichen f\u00fcr die Firmware der AVM-Karte genutzt wird. Weil die Wartung des Treibers seitens AVM eingestellt wurde und sich allerdings sehr viele abh\u00e4ngigen C-Headerdateien ge\u00e4ndert haben (insb. in der Kernelserie 2.6), ist ein Neukompilieren ohne Modifikation des quelloffenen Teils des Treibers nicht m\u00f6glich. In der Community gibt es allerdings immer wieder sehr findige C-Programmierer, die entsprechende Patches f\u00fcr den Sourcecode erarbeiten (\u00c4nderungen an der Firmware scheinen wohl nicht gemacht werden zu m\u00fcssen) und diese dann ver\u00f6ffentlichen. Kompliziert wird es nur dadurch, da\u00df manche Patches auf anderen Patches aufbauen und so erst mal die korrekte &#8220;Patchreihenfolge&#8221; herausgefunden werden mu\u00df.<\/p>\n<h4>Der einfache Weg des CAPIs<\/h4>\n<p>Derzeit sind Fedora Core 12-Benutzer, die ihre AVM Fritzkarte zum Laufen bringen wollen allerdings in einer recht gl\u00fccklichen Lage: Das <a href=\"http:\/\/www.atrpms.net\/\">ATrpms-Repository<\/a> stellt entsprechend vorkompilierte, bereits gepatchte RPM-Pakete f\u00fcr jede ver\u00f6ffentlichte FC12-Kernelversion zur Verf\u00fcgung (ggf. mit leichtem Zeitversatz). Die Installation dieser Pakete ist \u00fcber yum bzw. rpm m\u00f6glich. Unabh\u00e4ngig davon, ob man ich den Kartentreiber \u00fcber das Repository beschafft oder man den komplizierteren Patch&#038;Compile-Weg ausgesucht hat reicht dies nicht aus, um die Karte auch automatisch zum Laufen zu bringen. Details, welche weiteren Schritte hierzu n\u00f6tig sind, bietet eine <a href=\"http:\/\/www.fedorawiki.de\/index.php\/Fritzcard_mit_den_Treibern_von_AVM_%28Capi%29\">Wiki-Seite auf der FedoraWiki<\/a>. Im wesentlichen mu\u00df also dort <\/p>\n<ul>\n<li>weitere Devicefiles \u00fcber die udev-Schnittstelle anlegt (via mknod)<\/li>\n<li>eine Konfigurationsdatei zum Laden des Kerneltreibermoduls entsprechend angepa\u00dft und<\/li>\n<li>das automatische Starten des CAPI-Moduls veranla\u00dft<\/li>\n<\/ul>\n<p>werden. In einem konkreten Fall mit Fedora Core 12 zeigte sich, da\u00df die Erstellung der Datei <code>\/dev\/capi20<\/code> via udev (wie oben beschrieben) nicht ausreichte. Das Problem beim Systemstart war, da\u00df diese Datei offensichtlich von udev nicht erzeugt wurde. Eine Beschreibung, wie man diese Datei manuell erzeugen kann, findet sich zum Beispiel in <a href=\"http:\/\/lists.opensuse.org\/opensuse-isdn-de\/2004-10\/msg00081.html\">einem Eintrag bei OpenSuse<\/a>. Das zentrale Kommando dabei ist<\/p>\n<pre>\r\nmknod \/dev\/capi20 c 68 0\r\n<\/pre>\n<p>Auch hier ist wieder zu beachten: Ist das Erstellen der Datei notwendig, so mu\u00df dies bei jedem Neustart wieder durchgef\u00fchrt werden (Details siehe unten). Zu diesem Zweck empfiehlt es sich eine Datei <code>\/etc\/rc.d\/init.d\/capi-pre<\/code> zu erzeugen, die folgenden Inhalt aufweist:<\/p>\n<pre>\r\n#! \/bin\/bash\r\n#\r\n# chkconfig: 2345 8 90\r\n# description: start and stop capi services for passive ISDN cards\r\n#\r\n\r\nPATH=\/bin:\/sbin:\/usr\/bin:\/usr\/sbin\r\n\r\n# Source function library.\r\nif [ -f \/etc\/init.d\/functions ]; then\r\n    . \/etc\/init.d\/functions\r\nelif [ -f \/etc\/rc.d\/init.d\/functions ] ; then\r\n    . \/etc\/rc.d\/init.d\/functions\r\nelse\r\n    exit 0\r\nfi\r\n\r\n[ -f \/sbin\/capiinit ] || exit 0\r\n[ -f \/etc\/capi.conf ] || exit 0\r\nRETVAL=0\r\n\r\nfunction start()\r\n{\r\n    # don't start again if it's already started\r\n    action $\"preparing capi4linux:\" mknod -m 666 \/dev\/capi20 c 68 0\r\n    RETVAL=$?\r\n}\r\n\r\nfunction stop()\r\n{\r\n    RETVAL=0\r\n}\r\n\r\nfunction restart()\r\n{\r\n    RETVAL=0\r\n}\r\nfunction condrestart()\r\n{\r\n    RETVAL=0\r\n}\r\n\r\nfunction status()\r\n{\r\n    capiinfo\r\n}\r\n\r\ncase \"$1\" in \r\n    start)\r\n       start\r\n       ;;\r\n    stop)\r\n       stop\r\n       ;;\r\n    restart)\r\n       restart\r\n       ;;\r\n    condrestart)\r\n       condrestart\r\n       ;;\r\n    status)\r\n       status\r\n       ;;\r\n    *)\r\n       echo $\"Usage: $0 {start|stop|restart|status|condrestart}\"\r\n       exit 1\r\nesac\r\n\r\nexit 0\r\n<\/pre>\n<p>Wie bei allen Serviceskripts notwendig, mu\u00df das Skript per <\/p>\n<pre>\r\nchkconfig --add capi-pre\r\nchkconfig capi-pre on\r\n<\/pre>\n<p>zun\u00e4chst aktiviert werden.<\/p>\n<h4>ISDN4KUtils &#8211; und nu&#8217;?<\/h4>\n<p>F\u00fcr alle diejenigen, die &#8220;nur&#8221; eine Unterst\u00fctzung der CAPI-Schnittstelle f\u00fcr ihre Programme ben\u00f6tigen, ist das oben vorgestellte bereits ausreichend. Es gibt allerdings eine Reihe von Legacy-Anwendungen, die noch auf der alten ISDN-Subsystemschnittstelle arbeiten, darunter so [Ironie on] &#8220;unwichtige&#8221; [Ironie off] Programme, wie <\/p>\n<ul>\n<li>ipppd: ISDN-PPP-Daemon, der es erlaubt Internetverbindungen per ISDN herzustellen; auch dient er dazu, um den lokalen Server zu einem ISDN-Einwahlknoten zu machen<\/li>\n<li>vbox: Anrufbeantworter mit sehr vielen konfigurierbaren Optionen bis hin zu eigenen Scripts mit DTMF-Tonwahlerkennung<\/li>\n<li>isdnlog: D-Kanalprotokollierungssoftware zur Aufzeichnung von W\u00e4hlvorg\u00e4ngen und Telefonkostenanalysen<\/li>\n<\/ul>\n<p>Diese Programme befinden sich alle im ISDN4KUtils-Paket, das FC12 immer noch wie \u00fcblich zur Verf\u00fcgung stellt. Allerdings k\u00f6nnen diese nicht direkt auf die CAPI-Schnittstelle zugreifen. F\u00fcr diesen Zweck gibt es ein besonderes Kernelmodul, das die CAPI-Schnittstelle auf die ISDN-Subsystemschnittstelle \u00fcbersetzt. Dies hei\u00dft durchaus etwas unintuitiv &#8220;capidrv.ko&#8221; &#8211; der nicht eingeweihte Leser w\u00fcrde dahinter wohl eher das Basis-CAPI-Subsystem erwarten. <a href=\"http:\/\/www.misdn.org\/index.php\/Capidrv\">Dessen Anwendung wird auf den mISDN-Wikiseiten<\/a> recht unprosaisch vorgestellt und ist zudem auch noch stark aus dem Zusammenhang gerissen. Alleine von zentraler Bedeutung sind die folgenden Kommandos:<\/p>\n<pre>\r\nmodprobe capidrv\r\n\r\nmknod -m 660 \/dev\/ttyI0 c 43 0\r\nmknod -m 660 \/dev\/ttyI1 c 43 1\r\n...\r\nmknod -m 660 \/dev\/ttyI20 c 43 20\r\n<\/pre>\n<p>Allerdings ist auch das nur die H\u00e4lfte der Wahrheit, denn dann fehlen immer noch die beiden Char-Ger\u00e4te <code>\/dev\/isdnctrl0<\/code> und <code>\/dev\/isdninfo<\/code>, die f\u00fcr den Betrieb fast aller ISDN4KUtils-Programme unbedingt notwendig sind. Einen guten Hinweis, wie das Problem zu l\u00f6sen ist, wird auf einer <a href=\"https:\/\/wiki.archlinux.de\/title\/Isdn\">Wikiseite von ArchLinux<\/a> vorgestellt  (siehe dort Abschnitt &#8220;Isdnlog auch mit Capi weiterbenutzen&#8221;). Dadurch kommen nochmals die beiden Kommandos<\/p>\n<pre>\r\nmknod \/dev\/isdnctrl0 c 45 64 2>\/dev\/null\r\nmknod \/dev\/isdninfo c 45 255 2>\/dev\/null\r\n<\/pre>\n<p>hinzu. Es ist allerdings zu beachten, da\u00df alle diese Kommandos bei jedem Systemneustart auszuf\u00fchren sind, da die Kommandos zwar Dateien (genauer: Ger\u00e4tedateien) erzeugen, diese allerdings nur in ein virtuelles Dateisystem geschrieben werden, das naturgem\u00e4\u00df nach einem Neustart wieder auf den Initialzustand zur\u00fcckgesetzt wird. Anschlie\u00dfend kann die erfolgreiche Installation mit dem Kommando <code>imontty<\/code> gepr\u00fcft werden. Ist dort<\/p>\n<pre>\r\nISDN channel status:\r\n\r\nChannel                 Usage Type  Number\r\n----------------------------------------------------------------------\r\ncapidrv-1               Off\r\ncapidrv-1               Off\r\n<\/pre>\n<p>zu lesen (wichtig sind hier die beiden letzten Zeilen, die beide mit <code>capidrv-1<\/code> anfangen), dann war die Adapterkonfiguration erfolgreich.<\/p>\n<h4>Ausblick<\/h4>\n<p>Es scheint in der aktuellen Version von Fedora Core 12 auch einen quelloffenen Treiber f\u00fcr die AVM Fritzkarten mitgeliefert zu werden (avmfritz.ko). Offensichtlich hat dieser nichts mit dem hier vorgeschlagenen Originaltreiber von AVM zu tun. Zum Zeitpunkt des Schreibens dieses Blogeintrages allerdings war ich nicht in der Lage, ein System mit diesem Treiber erfolgreich zum Laufen zu bringen. Auch schweigt sich Google \u00fcber diesen Treiber derzeit noch vollkommen aus. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Blogeintrag beschreibt welche Schritte notwendig sind, um bei einer Fedora Core 12 Installation nicht nur die CAPI-Schnittstelle f\u00fcr die AVM Fritzkarten zum Laufen zu bringen, sondern auch die dazugeh\u00f6rige ISDN-Subsystemschnittstelle f\u00fcr die ISDN4KUtils (ipppd, vbox, isdnlog, &#8230;).<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"class_list":["post-295","post","type-post","status-publish","format-standard","hentry","category-fedora"],"_links":{"self":[{"href":"http:\/\/blog.schmoigl-online.de\/index.php?rest_route=\/wp\/v2\/posts\/295","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.schmoigl-online.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.schmoigl-online.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.schmoigl-online.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.schmoigl-online.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=295"}],"version-history":[{"count":11,"href":"http:\/\/blog.schmoigl-online.de\/index.php?rest_route=\/wp\/v2\/posts\/295\/revisions"}],"predecessor-version":[{"id":305,"href":"http:\/\/blog.schmoigl-online.de\/index.php?rest_route=\/wp\/v2\/posts\/295\/revisions\/305"}],"wp:attachment":[{"href":"http:\/\/blog.schmoigl-online.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=295"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.schmoigl-online.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=295"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.schmoigl-online.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=295"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}