The goal is to get a AVM ISDN Fritzcard passive working on Debian Linux Sarge and CAPI
Here are the details:
archive:~# uname -a
Linux archive 2.6.20.6 #2 Wed Apr 18 13:06:11 CEST 2007 i686 GNU/Linux
See below for 2.6.22+
archive:~# cat /etc/debian_version
3.1
archive:~#
archive:~# lspci -v -v -v | grep -A 10 AVM
0000:02:09.0 Network controller: AVM Audiovisuelles MKTG & Computer System GmbH Fritz!PCI v2.0 ISDN (rev 01)
Subsystem: AVM Audiovisuelles MKTG & Computer System GmbH Fritz!PCI v2.0 ISDN
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Interrupt: pin A routed to IRQ 20
Region 0: Memory at feaffc00 (32-bit, non-prefetchable) [size=32]
Region 1: I/O ports at dc00 [size=32]
Capabilities: [40] Power Management version 2
Flags: PMEClk- DSI- D1- D2+ AuxCurrent=55mA PME(D0-,D1-,D2+,D3hot+,D3cold+)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
And here is how I did it:
- Fetch the suse src rpm
- Extract it
- Patch it
- Build
- Copy kernel module into module directory
- depmod
- modprobe
The details as follow:
- Fetch the suse src rpm
archive:/usr/src# wget http://www.blagblagblag.org/pub/mirrors/atrpms/src/fc3-i386/atrpms/SRPMS.stable/fcpci-03.11.07-10.at.src.rpm
- Extract it
archive:/usr/src# rpm2cpio fcpci-03.11.07-10.at.src.rpm > fcpci-03.11.07-10.at.cpio
archive:/usr/src# cpio -i --make-directories < fcpci-03.11.07-10.at.cpio
archive:/usr/src# mkdir fcpci
archive:/usr/src# cd fcpci
archive:/usr/src/fcpci# cpio -i --make-directories < ../fcpci-03.11.07-10.at.cpio
archive:/usr/src/fcpci# tar xzf fcpci-suse93-3.11-07.tar.gz
- Patch it
Get the patch here:
http://134.93.168.49/~reiffert/fcpci-debian.diff
archive:/usr/src/fcpci/fritz# patch -p1 < ../fcpci-debian.diff
patching file src/driver.c
patching file src/driver.h
patching file src/main.c
patching file src/Makefile
patching file src/tools.h
archive:/usr/src/fcpci/fritz#
- Build
archive:/usr/src/fcpci/fritz# make
make -C src
make[1]: Entering directory `/usr/src/fcpci/fritz/src'
make -C /lib/modules/2.6.20.6/build SUBDIRS=/usr/src/fcpci/fritz/src modules
make[2]: Entering directory `/home/users/thomas/kernel/kernel/archive/linux-2.6.20.6'
CC [M] /usr/src/fcpci/fritz/src/main.o
CC [M] /usr/src/fcpci/fritz/src/driver.o
/usr/src/fcpci/fritz/src/driver.c: In function `install_card':
/usr/src/fcpci/fritz/src/driver.c:383: warning: passing arg 2 of `request_irq' from incompatible pointer type
CC [M] /usr/src/fcpci/fritz/src/tools.o
CC [M] /usr/src/fcpci/fritz/src/tables.o
CC [M] /usr/src/fcpci/fritz/src/queue.o
CC [M] /usr/src/fcpci/fritz/src/lib.o
LD [M] /usr/src/fcpci/fritz/src/fcpci.o
Building modules, stage 2.
MODPOST 1 modules
CC /usr/src/fcpci/fritz/src/fcpci.mod.o
LD [M] /usr/src/fcpci/fritz/src/fcpci.ko
make[2]: Leaving directory `/home/users/thomas/kernel/kernel/archive/linux-2.6.20.6'
make[1]: Leaving directory `/usr/src/fcpci/fritz/src'
archive:/usr/src/fcpci/fritz#
- Copy kernel module into module directory
archive:/usr/src/fcpci/fritz# cp src/fcpci.ko /lib/modules/2.6.20.6/kernel/
- depmod
archive:/usr/src/fcpci/fritz# depmod -ae
- modprobe
archive:/usr/src/fcpci/fritz# modprobe fcpci
Apr 18 14:11:41 archive kernel: fcpci: AVM FRITZ!Card PCI driver, revision 0.7.2
Apr 18 14:11:41 archive kernel: fcpci: (fcpci built on Apr 18 2007 at 14:10:58)
Apr 18 14:11:41 archive kernel: fcpci: -- 32 bit CAPI driver --
Apr 18 14:11:41 archive kernel: fcpci: AVM FRITZ!Card PCI found: port 0xdc00, irq 20
Apr 18 14:11:41 archive kernel: fcpci: Loading...
Apr 18 14:11:41 archive kernel: fcpci: Driver 'fcpci' attached to fcpci-stack. (152)
Apr 18 14:11:41 archive kernel: fcpci: Stack version 3.11-07
Apr 18 14:11:41 archive kernel: kcapi: Controller 1: fcpci-dc00-20 attached
Apr 18 14:11:41 archive kernel: kcapi: card 1 "fcpci-dc00-20" ready.
Apr 18 14:11:41 archive kernel: fcpci: Loaded.
Date: Tue, 10 Jul 2007 06:27:40 +0200
From: Bernd Knochenhauer
To: xxxxx@xxxx.physik.uni-mainz.de
Subject: Fritzcard & 2.6.22
Hello Thomas,
The patch does not compile on Linux Kernel 2.6.22 anymore.
pci_module_init is deprecated.
Replace it by pci_register_driver:
fritz/src/main.c
#if defined (__fcpci__)
/* if (0 == (err = pci_module_init (&fcpci_driver))) { */
if (0 == (err = pci_register_driver (&fcpci_driver))) {
LOG("PCI driver registered.\n");
Thanks Bernd.