Vorbemerkung

Für die Fritz!Card USB 2.0 gibt es aktuell keinerlei Treiber für Ubuntu 7.04.Die Sourcen von AVM sind leider auch auf einem sehr alten Stand und hören bei Suse 9.3 auf.Dazwischen hat sich am Kernel aber so viel geändert, dass sich diese Treiber mit einem Kernel 2.6.20 nicht übersetzen lassen

Recherchen

Es gibt einige Versuche im Web die Suse 9.3 Treiber unter Feisty zu übersetzen. Aber die Lösungen die ich gefunden habe sind alle Lückenhaft und funktionieren letztlich alle nicht

linux-restricted-modules-common

Es gibt unter Ubuntu einen Ansatz Treiber (Module) für nicht unter der GPL stehende Treiber anhzubieten. In linux-restricted-modules gibt es einige AVM Treiber, aber nicht für die Fritz!Card USB 2.0In dem Paket avm-fritz-kernel-source sind die Treiber für die Fritz!Card USB 2.0 auch nicht enthalten.Hier gibt es nur die Fritz!Card USB (1.0)

Recherche

Ubuntu hochfahren und Terminalfenster öffnen# tail -f /var/log/messages

Dann die Fritz!Card USB 2.0 einstecken.
May  4 16:00:44 localhost kernel: [  107.616000] usb 2-1: new full speed USB device using uhci_hcd and address 2
May  4 16:00:44 localhost kernel: [  107.796000] usb 2-1: configuration #1 chosen from 2 choices

Immerhin von Seiten USB wird eine Karte erkannt aber mehr auch nicht.
Siehe: www.ubuntu-forum.de/thread.php
Auch lsusb zeigt die Karte korrekt an:
# lsusb
Bus 002 Device 002: ID 057c:1000 AVM GmbH

Also versuchen wir es selbst

Voraussetzungen: Kernel

Kernel
Wir benötigen einen Kernel mit ISDN Support. Das prüfen wir im Editor via
# joe /usr/src/linux



#
# ISDN subsystem
#
CONFIG_ISDN=m

#
# Old ISDN4Linux
#
# CONFIG_ISDN_I4L is not set

#
# CAPI subsystem
#
CONFIG_ISDN_CAPI=m
CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
CONFIG_CAPI_TRACE=y
CONFIG_ISDN_CAPI_MIDDLEWARE=y
CONFIG_ISDN_CAPI_CAPI20=m
CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
CONFIG_ISDN_CAPI_CAPIFS=m

Wenn diese Angaben differieren müssen wir einen passenden Kernel bauen

Pakete installieren

Wir installieren diese Pakete
# sudo apt-get install isdnutils-base isdnutils
# sudo apt-get install capiutils pppdcapiplugin isdnactivecards

libcapi20-3 libcapi20-dev
# sudo apt-get install ppp pppstatus

Das sollte alles fehlerfrei durchlaufen.
Ich bekam "Fehler:mount: unknown filesystem type 'capifs'"
Ich habe kein ISDN in meinem Kernel konfiguriert. Also erst mal einen neuen Kernel bauen...

Aktuelle AVM Treiber besorgen

Wir besorgen uns die letzten AVM Treiber für die Fritz!Card USB 2.0

# cd /home/thomas/install/fritzcard/fritzcard.usb2/

# wget ftp://ftp.avm.de/cardware/fritzcrdusb.v20/linux/suse.93/fcusb2-suse93-3.11-07.tar.gz

# tar xzfv fcusb2-suse93-3.11-07.tar.gz
# mv fritz fcusb2-suse93-3.11-07
# cd fcusb2-suse93-3.11-07

Bugs im Sourcecode beheben

Ich habe basierend auf den letzten Stand von AVM fcusb2-suse93-3.11-07.tar.gz die Unterschiede als Patch / Diff Dateien erstellt.

Siehe Download

Wer diese Patches einspielt, braucht die folgenden manuellen Änderungen nicht vorzunehmen.

tools.h:74:

Der erste Fehler bezieht sich auf tools.h:74:
Fehler:
expected identifier or »(« before »typeof« Dieser Fehler ist bekannt.Wir editieren die Datei
# joe src/tools.h

Alter Stand:
static inline unsigned long atomic_xchg (
       volatile atomic_t *     v,
       unsigned                value
) {
        return __xchg (value, &v->counter, sizeof (unsigned));
} /* atomic_xchg */


Neuer Stand (wir kommentieren nur diese Zeilen aus)
/* static inline unsigned long atomic_xchg (
       volatile atomic_t *     v,
       unsigned                value
) {
       return __xchg (value, &v->counter, sizeof (unsigned));
}*/ /* atomic_xchg */

driver.h:28

Der zweite Fehler bezieht sich auf: driver.h:28:26: error: linux/config.h: No such file or directory
Wir editieren die Datei:
# joe src/driver.h

Alter Stand:
#include <linux/config.h>

Neuer Stand
#include <linux/autoconf.h>

main.c:85:

Der dritte Fehler bezieht sich auf: main.c:85: Fehler: unbekanntes Feld »owner« in Initialisierung angegeben Dieser Fehler ist ebenso bekannt.Wir editieren die Datei:
# joe src/main.c

Alter Stand:
struct usb_driver usb_driver = {

       .owner =        THIS_MODULE,
       .name =         TARGET,
       .id_table =     usb_id_table,
       .probe =        usb_probe,   
       .disconnect =   usb_disconnect,
} ;
Neuer Stand (wir kommentieren eine Zeile aus)
struct usb_driver usb_driver = {

      /* .owner =        THIS_MODULE, */
       .name =         TARGET,
       .id_table =     usb_id_table,
       .probe =        usb_probe,   
       .disconnect =   usb_disconnect,
} ;

driver.c:792:53:

Der vierte Fehler bezieht sich auf: driver.c:792:53: error: macro "INIT_WORK" passed 3 arguments, but takes just 2 Für diesen Fehler habe ich keine Lösung gefunden. Ich habe daraufhin den Quellcode der Fritz!Card USB aus dem Ubuntu Paket avm-fritz-kernel-source mit der entsprechenden Stellen verglichen und kam zur folgenden LösungWir editieren die Datei:
# joe src/main.c

Alter Stand:
INIT_WORK (&closing_work, closing_worker, capi_card);


Neuer Stand (der letzte Parameter entfällt)
INIT_WORK (&closing_work, closing_worker);

Sourcecode übersetzen

Jetzt sollte sich der Sourcecode mit einigen Warnungen übersetzen lassen.# cd /home/thomas/install/fritzcard/fritzcard.usb2/fcusb2-suse93-3.11-07/
# sudo make clean
# sudo make

...
make[2]: Verlasse Verzeichnis '/usr/src/linux-source-2.6.20r21'
make[1]: Verlasse Verzeichnis '/home/thomas/install/fritzcard/fritzcard.usb2/fcusb2-suse93-3.11-07/src'

Die Installation sollte auch funktionieren:
# sudo make install

Wir aktualisieren noch die Liste der Module
# sudo depmod

/etc/isdn/capi.conf

Wir müssen nun noch in der /etc/isdn/capi.conf die Frit!Card USB 2.0 eintragen# joe /etc/isdn/capi.conf

Für eine Fritz!Card USB 2.0# card          file            proto   io      irq     mem     cardnr  options
fcusb2          /etc/isdn/fus2base.frm  DSS1    -       -       -       -

Für eine Fritz!Card USB 2.1# card          file            proto   io      irq     mem     cardnr  options
fcusb2          /etc/isdn/fus3base.frm  DSS1    -       -       -       -

Testen

Wir starten den Rechner neu
# sudo shutdown now -r

Dann starten wir die capiutils neu:
# sudo /etc/init.d/capiutils restart

Achtung!!! Das führt zu einer Kernel Panic! Genaueres im nächsten Punkt!

Kernel Panic

Beim Beenden des Daemons /usr/sbin/capiinit in der /etc/init.d/capiutils kommt es zu einem Kernel Panic. Dieser ist auf zwei IBM Thinkpads (T42 / R52) nachvollziehbar.

Als Hack kann man in der /etc/init.d/capiutils die beiden Zeilen mit "$DAEMON stop" auskommentieren.
Das sieht dann so aus:

#!/bin/sh -e
PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/sbin/capiinit
NAME=capiinit
DESC='ISDN CAPI Cards'
test -f $DAEMON || exit 0    # sanity check
. /lib/lsb/init-functions
if [ -f /etc/default/capiutils ]; then
  . /etc/default/capiutils
fi
mkcapidev()  
{
  if [ ! -e /dev/capi20 ]; then
   mknod -m 660 /dev/capi20 c 68 0
   chown root:dialout /dev/capi20
 fi
}
mountcapifs()
{
 if grep -q '/dev devfs rw' /proc/mounts; then
   return
 fi

 if [ -e /dev/.devfsd ]; then
   modprobe capifs
 fi
 if grep -q '^capifs /dev/capi ' /proc/mounts; then
   return
 fi
 rm -rf /dev/capi
 mkdir -m 755 /dev/capi
 mount -t capifs -omode=0666 capifs /dev/capi
}
umountcapifs()
{
 if ! grep -q '^capifs /dev/capi ' /proc/mounts; then
   return
 fi
 umount /dev/capi
 if ! grep -q '^capifs ' /proc/mounts; then
   rmmod capifs 2>/dev/null || true
 fi
}
case "$1" in
 start)
   mkcapidev
   mountcapifs
   if grep -Evq '^ *$|^ *#' /etc/isdn/capi.conf; then
     # assume AVM driver
     log_begin_msg "Starting $DESC..."
     $DAEMON start
     log_end_msg $?
   elif [ -n "$MISDN_DRIVER" ]; then
     # assume mISDN driver
     modprobe capi
     log_begin_msg "Loading mISDN..."
     for m in $MISDN_MODULES; do
       modprobe $m || true
     done
     modprobe $MISDN_DRIVER || true
     log_end_msg $?
   fi
   ;;
 stop)
   if [ -d /proc/capi ]; then
     if grep -Evq '^ *$|^ *#' /etc/isdn/capi.conf; then
       log_begin_msg "Stopping $DESC :"
       #Kernel Panic!!!
       #$DAEMON stop   
       log_end_msg $?  
     fi
     if [ -n "$MISDN_DRIVER" ]; then
       modprobe -r ${MISDN_DRIVER%% *}
       for m in $MISDN_MODULES; do ms="$m $ms"; done
       for m in $ms; do
         modprobe -r $m || true
       done
     fi
   fi  
   umountcapifs
   exit 0
   ;;
 reload|restart|force-reload)
   # reload doesn't really work here...
   if [ -d /proc/capi ]; then
     if grep -Evq '^ *$|^ *#' /etc/isdn/capi.conf; then
       log_begin_msg "Restarting $DESC :"
       #Kernel Panic!!!
       #$DAEMON stop   
     fi
   fi  
   mkcapidev
   mountcapifs
   if grep -Evq '^ *$|^ *#' /etc/isdn/capi.conf; then
     $DAEMON start
     log_end_msg $?
   elif [ -n "$MISDN_DRIVER" ]; then
     # assume mISDN driver
     log_begin_msg "Loading mISDN..."
     modprobe capi
     for m in $MISDN_MODULES; do
       modprobe $m || true
     done
     modprobe $MISDN_DRIVER || true
     log_end_msg $?
   fi
   ;;
 *)  
   log_success_msg "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}"
   exit 1
   ;;
esac  
exit 0

Fax: OpenOffice

Zitat von hier:
wiki.ubuntuusers.de/CapiSuite
Um aus OpenOffice.org heraus faxen zu können, muss man mit Hilfe des Programms /usr/lib/openoffice/program/spadmin einen neuen Fax-Drucker konfigurieren. Im spadmin-Fenster also "Neuer Drucker" auswählen, dann "eine Faxlösung anbinden", "der Standardtreiber", und dann folgendes als Kommandozeile angeben:/usr/bin/capisuitefax -q -d "(PHONE)" "(TMP)"

Dann noch einen Namen für den Drucker vergeben, und "Fertig stellen"Anmerkung: Ich dachte man könne die Faxnummer in der fax.conf leer lassen, wenn man nicht empfangen will. Aber das geht nicht, denn dann ist der Faxversand nicht erlaubt. Ich habe deswegen eine ungültige Faxnummer eingegeben:
[thomas]
# Leere Nummer geht nicht!!!
fax_numbers="0190999999"
fax_stationID="+49 30 000000"
fax_headline="Fax von Anja & Thomas"
fax_email=""
fax_action="MailAndSave"