AVM FRITZ!Card CAPI-Treiber unter openSUSE Leap 16

Community-Pakete für CAPI4Linux sowie historische AVM FRITZ!Card USB- und PCI-Adapter unter Linux Kernel 6.12
Status: funktionierend getestet

openSUSE Leap 16.0
Kernel: 6.12.0-160000.37-default

Getestete Hardware:
AVM FRITZ!Card USB v2/v2.1
AVM FRITZ!Card PCI v2.0 · PCI-ID 1244:0e00

CAPI 2.0
AVM Stack: 3.11-07
2 B-Kanäle
automatischer Start nach Reboot getestet

Projekt

Aktuelle Linux-Kernel enthalten den klassischen CAPI4Linux-Unterbau nur noch eingeschränkt. Zusätzlich verwenden die historischen AVM-Treiber der FRITZ!Card USB und FRITZ!Card PCI zahlreiche Kernel-Schnittstellen, die in modernen Kernelversionen nicht mehr vorhanden oder verändert sind.

Dieses Projekt stellt einen wiederhergestellten CAPI-Unterbau, angepasste AVM-Treiber sowie ausgewählte CAPI-Werkzeuge als RPM-Pakete für openSUSE Leap 16 bereit.

Getestet wurden sowohl eine FRITZ!Card USB v2/v2.1 als auch eine FRITZ!Card PCI v2.0.

Pakete

Paket Funktion
kernel-capi-compat-kmp-default Stellt kernelcapi.ko und die benötigten CAPI-Kompatibilitätsfunktionen für die AVM-Treiber bereit.
fritzcard-usb2-kmp-default FRITZ!Card USB Treiber fcusb2.ko, AVM-Firmware und automatischer Systemstart.
fritzcard-pci-kmp-default FRITZ!Card PCI Treiber fcpci.ko für AVM FRITZ!Card PCI und PCI v2.0.
isdn4k-utils-capi capiinit und capiinfo.
isdn4k-utils-capifax capifax und capifaxrcvd.
isdn4k-utils-rcapid Remote-CAPI-Server.

Downloads

CAPI-Unterbau

kernel-capi-compat-kmp-default-6.12_k6.12.0_160000.37-1.x86_64.rpm

FRITZ!Card USB

fritzcard-usb2-kmp-default-0.8.2-2.x86_64.rpm

FRITZ!Card PCI / PCI v2.0

fritzcard-pci-kmp-default-0.7.2-2.x86_64.rpm

CAPI-Werkzeuge

isdn4k-utils-capi-2011.8.29-1.x86_64.rpm isdn4k-utils-capifax-2011.8.29-1.x86_64.rpm isdn4k-utils-rcapid-2011.8.29-1.x86_64.rpm

Entwicklung

kernel-capi-compat-devel-6.12-1.x86_64.rpm

Source-RPMs

kernel-capi-compat-6.12-1.src.rpm fritzcard-usb2-kmp-default-0.8.2-2.src.rpm fritzcard-pci-kmp-default-0.7.2-2.src.rpm isdn4k-utils-compat-2011.8.29-1.src.rpm

PCI-Quellen

fritzcard-pci-0.7.2.tar.xz fritzcard-pci.spec

SHA256SUMS

Installation

Gemeinsame Voraussetzungen

Für beide Karten werden zunächst der CAPI-Unterbau und die CAPI-Werkzeuge installiert:

sudo zypper in \
  kernel-capi-compat-kmp-default-6.12_k6.12.0_160000.37-1.x86_64.rpm

sudo zypper in \
  isdn4k-utils-capi-2011.8.29-1.x86_64.rpm

FRITZ!Card USB

sudo zypper in \
  fritzcard-usb2-kmp-default-0.8.2-2.x86_64.rpm

Das USB-Treiberpaket enthält:

fcusb2.ko
fus2base.frm
fus3base.frm
/usr/lib/modules-load.d/fritzcard-capi.conf
/usr/lib/systemd/system/fritzcard-capi.service

FRITZ!Card PCI / PCI v2.0

sudo zypper in \
  fritzcard-pci-kmp-default-0.7.2-2.x86_64.rpm

Das PCI-Paket enthält:

fcpci.ko
/usr/lib/modules-load.d/fritzcard-pci.conf

Der PCI-Treiber benötigt keinen separaten Firmware-Upload. Der Controller wird beim Laden des Moduls direkt initialisiert.

Nach der Installation:

sudo reboot

Funktionstest

FRITZ!Card USB

systemctl status fritzcard-capi.service

sudo /sbin/capiinit status

sudo /usr/bin/capiinfo

Bei erfolgreichem Start zeigt capiinit status beispielsweise:

1 fcusb2     running  fcusb2-0003      A1 3.11-07 3

FRITZ!Card PCI

lsmod | grep -E 'fcpci|kernelcapi'

sudo /sbin/capiinit status

sudo /usr/bin/capiinfo

Bei der getesteten FRITZ!Card PCI v2.0:

1 fcpci      running  fcpci-c000-20    A1 3.11-07 0xc000 20

capiinfo meldet unter anderem:

Number of Controllers : 1
Controller 1:
Manufacturer: AVM GmbH
CAPI Version: 2.0
Manufacturer Version: 3.11-07
BChannels: 2

Beim erfolgreichen Test beendet sich capiinfo mit Returncode 0.

Kernelmodule

/usr/sbin/modinfo -F filename kernelcapi
/usr/sbin/modinfo -F filename fcusb2
/usr/sbin/modinfo -F filename fcpci

Beim getesteten Kernel liegen die Module unter:

/usr/lib/modules/6.12.0-160000.37-default/updates/kernelcapi.ko
/usr/lib/modules/6.12.0-160000.37-default/updates/fcusb2.ko
/usr/lib/modules/6.12.0-160000.37-default/updates/fcpci.ko

FRITZ!Card PCI – technische Details

Getestete Karte:
AVM FRITZ!Card PCI v2.0
PCI-ID: 1244:0e00
I/O-Port beim Test: 0xc000
Treiber: fcpci
AVM Stack: 3.11-07

Der historische AVM-PCI-Treiber ließ sich nicht unverändert gegen Linux 6.12 bauen. Unter anderem mussten veraltete Kernel-APIs, IRQ-Schnittstellen und die Tasklet-Verarbeitung angepasst werden.

Scheduler- und Tasklet-Anpassung

Ein besonders schwieriger Fehler trat nach dem zunächst erfolgreichen Laden des Treibers auf:

Der Controller wurde erkannt und als running gemeldet, CAPI-Anwendungen konnten sich registrieren, echte CAPI-Nachrichten wurden jedoch nicht weiterverarbeitet.

Die Diagnose zeigte einen ungültigen Tasklet-Zähler:

count=-1
state=0x1

Damit war das Scheduler-Tasklet zwar als geplant markiert, konnte aber nicht ausgeführt werden.

Nach Korrektur der Initialisierungsreihenfolge wurde der erwartete Zustand erreicht:

count=0
state=0x0

Danach funktionierte der vollständige CAPI-Nachrichtenweg:

REGISTER(appl:1)
PUT_MESSAGE(appl:1,cmd:80,subcmd:80)
GET_MESSAGE(appl:1,cmd:80,subcmd:81)
RELEASE(appl:1)

Damit konnte insbesondere die von capiinfo verwendete FACILITY-Abfrage erfolgreich verarbeitet werden.

Sauberes Entladen des PCI-Treibers

Auch der Shutdown-Pfad musste angepasst werden. Ein tasklet_disable() unmittelbar vor tasklet_kill() konnte auf dem modernen Kernel beim Entladen des Moduls hängen bleiben.

Nach der Korrektur funktioniert:

sudo rmmod fcpci

Der Kernel meldet anschließend:

fcpci: Removing...
kcapi: controller [001] down.
kcapi: controller [001]: fcpci-c000-20 unregistered
fcpci: Removed.
fcpci: Driver 'fcpci' detached

Wichtige Anpassungen des PCI-Treibers

Aus den Source-RPMs neu bauen

Beispiel:

rpmbuild --rebuild kernel-capi-compat-6.12-1.src.rpm

sudo zypper in \
  kernel-capi-compat-devel-6.12-1.x86_64.rpm

rpmbuild --rebuild \
  fritzcard-usb2-kmp-default-0.8.2-2.src.rpm

rpmbuild --rebuild \
  fritzcard-pci-kmp-default-0.7.2-2.src.rpm

rpmbuild --rebuild \
  isdn4k-utils-compat-2011.8.29-1.src.rpm

Kernelupdates

Wichtig:
Die Kernelmodule sind gegen eine bestimmte Kernelversion gebaut. Nach einem Kernelupdate kann ein Neubau der KMP-Pakete gegen den neuen Kernel erforderlich sein.

Technische Änderungen am CAPI-Unterbau

Für moderne Kernel wurde der klassische CAPI-Unterbau als externes Modul wieder bereitgestellt.

Zusätzlich wurden die von den historischen AVM-Treibern benötigten CAPI-Schnittstellen und Manufacturer-Kommandos wieder angebunden.

Der historische capiinit-Code wurde ebenfalls für moderne Systeme angepasst. Unter anderem wird ein geladener Treiber über /sys/module/ erkannt und das nicht mehr vorhandene capifs nicht länger vorausgesetzt.

Status

FRITZ!Card USB erfolgreich getestet
Treiberstart nach Reboot
Controller running
CAPI 2.0 verfügbar

FRITZ!Card PCI v2.0 erfolgreich getestet
Treiberstart nach Reboot
Controller running
CAPI-Nachrichten senden und empfangen
capiinfo Returncode 0
sauberes Entladen mit rmmod fcpci

Hinweise

Die Pakete sind Community-Builds und keine offiziellen Pakete von AVM oder SUSE. Die Verwendung erfolgt auf eigene Verantwortung.

Der enthaltene historische AVM-Treiber und die Firmware unterliegen den jeweils zugehörigen Lizenzbedingungen.

Source-RPMs und Quellarchive werden mit veröffentlicht, damit die Pakete bei Kernelupdates reproduzierbar neu gebaut und weiterentwickelt werden können.