AVM FRITZ!Card CAPI-Treiber unter openSUSE Leap 16
openSUSE Leap 16.0
Kernel:
6.12.0-160000.37-defaultGetestete Hardware:
AVM FRITZ!Card USB v2/v2.1
AVM FRITZ!Card PCI v2.0 · PCI-ID
1244:0e00CAPI 2.0
AVM Stack:
3.11-072 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.rpmFRITZ!Card USB
fritzcard-usb2-kmp-default-0.8.2-2.x86_64.rpmFRITZ!Card PCI / PCI v2.0
fritzcard-pci-kmp-default-0.7.2-2.x86_64.rpmCAPI-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.rpmEntwicklung
kernel-capi-compat-devel-6.12-1.x86_64.rpmSource-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.rpmPCI-Quellen
fritzcard-pci-0.7.2.tar.xz fritzcard-pci.specInstallation
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
AVM FRITZ!Card PCI v2.0
PCI-ID:
1244:0e00I/O-Port beim Test:
0xc000Treiber:
fcpciAVM 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
- Anpassung an das moderne Kbuild-System mit
M= - Anpassung der IRQ-Handler-Schnittstelle
- Entfernung von
IRQF_DISABLED - Entfernung alter
__devinit- und__devexit-Konstrukte - Anpassung der Tasklet-Callback-API
- Korrektur der Tasklet-Initialisierung
- Korrektur des Scheduler-Pfades
- Korrektur des Module-Unload-Pfades
- Anpassung alter procfs-Schnittstellen
- Einbindung der CAPI-Kompatibilitätsfunktionen
- Unterstützung der AVM PCI-ID
1244:0e00
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
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
Treiberstart nach Reboot
Controller
runningCAPI 2.0 verfügbar
FRITZ!Card PCI v2.0 erfolgreich getestet
Treiberstart nach Reboot
Controller
runningCAPI-Nachrichten senden und empfangen
capiinfo Returncode 0sauberes 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.