Login
Newsletter
Werbung

Mi, 11. Juni 2003, 00:00

Howto: ISDN Fritz PCI 2.0 unter Debian

Falls aber der Kernel doch selbst konfiguriert und kompiliert werden soll, so findet sich in der Datei src.sys/capi_modules.txt des Fritz-Pakets eine genauere Information, welche Kernel-Optionen eingeschaltet werden müssen:

 CONFIG_EXPERIMENTAL=y
 ...
 <M> CAPI2.0 support
 [*] Verbose reason code reporting (Kernel size +=7K)
 [*] CAPI2.0 Middleware support (EXPERIMENTAL)
 <M> CAPI2.0 /dev/capi support
 [*] CAPI2.0 filesystem support
 <M> CAPI2.0 capidrv interface support
 ...

Im Internet finden sich viele Kernel-Build-Howtos, weswegen ich hier nur kurz zusammengefasst aufschreibe, wie ich vorgegangen bin:

  • Ich habe alles als user "root" durchgeführt.
  • apt-get install kernel-source-2.4.18 kernel-package tk8.3-dev
  • zless /usr/doc/kernel-package/README.gz (unbedingt durchlesen!)
  • cd /usr/src
  • tar xjf kernel-source-2.4.18.tar.bz2
  • cd kernel-source-2.4.18
  • make xconfig aufrufen für die GUI gestützte Kernel-Konfiguration. Funktioniert dies nicht, weil vielleicht kein X-Server läuft, findet sich in dem genannten kernel-package/README.gz der Hinweis, wie man den Kernel in der Shell konfigurieren kann: make menuconfig. Dafür muß das Paket ncursesX.X-dev installiert sein.
  • Über Load Configuration from File die Debian-Default-Konfiguration laden. Sie findet sich bei mir in der Datei /boot/config-2.4.18-bf2.4
  • In dem Menüpunkt Code maturity level options die Option Prompt for development andor incomplete codedrivers auf "y" schalten und zurück zum "Main Menu".
  • Unter ISDN Subsystem und weiter in Active ISDN cards finden sich dann die in der Fritz-Datei src.sys/capi_modules.txt erwähnten Punkte, die so eingestellt werden müssen, wie in der Fritz-Datei gezeigt ist. Mit OK und Main Menu geht's zurück zum Hauptmenü.
  • Save and Exit anwählen.
  • make-kpkg clean
  • make-kpkg --revision=custom.1.0 build
  • make-kpkg --revision=custom.1.0 kernel_image
  • cd ..
  • dpkg -i kernel-image-2.4.18_custom.1.0_i386.deb
  • reboot, um den Rechenr neu zu starten.

CAPI installieren

Ich habe lange gebraucht, um herauszufinden, daß nun noch einige Pakete installiert werden müssen. Speziell, daß ich das Paket isdnactivecards benötige, obwohl die Fritz PCI 2.0 eine passive Karte ist, war ziemlich verwirrend. Vielleicht hätte ich beim Kernel-Bauen besser aufpassen müssen, wo CAPI auch in dem Untermenü für Active ISDN cards angeschaltet wurde.

apt-get install isdnactivecards pppdcapiplugin

Das Paket libcapi20 (bzw. libcapi20-2 oder ähnlich) sollte damit unter anderem automatisch mitinstalliert werden. Wenn hier nun Fehlermeldungen beim Starten von CAPI erscheinen, ist das OK, wir sind ja noch nicht fertig.

Fritz-Treiber kompilieren und installieren

Falls eine andere als die voreingestellte C-Compiler-Version benötigt wird (siehe Abschnitt zum fritz-Treiber-Download), so kann die Auswahl beispielsweise mit export CC="/usr/bin/gcc-2.95" erfolgen. Diese Einstellung ist nur für die aktuelle Shell gültig. Ich weiß leider nicht, welches die beste Art und Weise ist, die gcc-Version zu bestimmen, mit der der Kernel kompiliert wurde. Hinweise liefert anscheinend aber die Datei /usr/share/doc/kernel-image-2.4.20-1-686/Changes.gz (die kernel-image-Versionsnummer im Pfad muß natürlich ggf. angepaßt werden). gcc-2.95 kompiliert bei mir den Fritz-Treiber ohne Fehler, während gcc-3.3 einige Warnings wirft. Im Zweifelsfall sollte also gcc-2.95 benutzt werden. Unter Debian/Woody muß man sich hierum nicht kümmern, da wird automatisch der richtige Compiler benutzt.

Damit der Compiler die Kernel-Header findet, muß ggf. noch ein Eintrag in der Datei src.drv/makefile des Fritz-Pakets geändert werden. Es gibt dort eine Zeile, in der die Variable KRNLINCL gesetzt wird. Dies muß auf eine der folgenden Möglichkeiten gesetzt werden:

KRNLINCL = /usr/src/kernel-headers-`uname -r`/include
#KRNLINCL = /lib/modules/`uname -r`/build/include
#KRNLINCL = /usr/src/linux/include

Die Variante, die bei Aufruf mit "ls" keinen Fehler wirft, ist die richtige. ls /usr/src/kernel-headers-`uname -r`/include ist bspw. korrekt, wenn ein neues Kernel-Image per Debian-Paket installiert wurde. Die unterste der drei Alternativen kann benutzt werden, wenn in /usr/src ein symbolischer Link linux auf das Unterverzeichnis mit den Kernel-Source- oder Header-Dateien gesetzt wurde.

Nach dieser ganzen Vorarbeit sollte der Treiberbau recht einfach zu erledigen sein, wenn in der Datei /usr/local/src/fritz/make.card der Eintrag für den Kartentreiber korrekt ist. Bei mir war es aber mit CARD=fcpci korrekt voreingestellt.

su (falls man nicht schon "root" ist)
cd /usr/local/src/fritz
make clean
make
make install
depmod -a

Ein unschöne Sache, die bei mir nun auftrat, war eine "unresolved symbols" Meldung des fcpci-Moduls, die ein depmod -a, das auch bei jedem Systemstart aufgerufen wird, gemeldet hat:

# depmod -a
depmod: *** Unresolved symbols in /lib/modules/2.4.20-1-686/misc/fcpci.o

Trotz dieser Meldung funktionierte der Treiber aber seltsamerweise. Dank eines Hinweises auf der CAPI-Seite von Steffen Barszus hat sich auch hierfür eine Lösung gefunden. Man muß die Fritz-Datei src.drv/makefile editieren. Dort gibt es direkt hinter der Definition der KRNLINCL Variablen folgende Zeilen, die im Original so aussahen:

# As propsed by /usr/include/linux/version.h...
DEFINES = -DMODULE -D__KERNEL__ -DNDEBUG \
 -D__$(CARD)__ -DTARGET=\"$(CARD)\"
CCFLAGS = -c $(DEFINES) -O2 -Wall -I $(KRNLINCL)

und von mir geändert wurden in

DEFINES = -DMODULE -DMODVERSIONS -D__KERNEL__ -DNDEBUG \
 -D__$(CARD)__ -DTARGET=\"$(CARD)\"
CCFLAGS = -c $(DEFINES) -march=i686 -O2 -Wall -I $(KRNLINCL) \
 -include $(KRNLINCL)/linux/modversions.h

Ggf. muss der CPU-Typ "i686" angepasst werden. Im Zweifelsfall setzt man diesen vermutlich am besten auf "i386". Danach nochmals ein make clean; make; make install, und ein depmod -a hat nicht mehr gemeckert.

CAPI konfigurieren und starten

Nun müssen nur noch in der Datei /etc/isdn/capi.conf alle Zeilen auskommentiert werden, bis auf die für die Karte "fcpci":

# card file proto io irq mem cardnr options
fcpci - - - - - -

Damit sollte CAPI gestartet werden können, was bei einem Reboot automatisch erfolgt. Ohne Neustart des Rechners geht es mit Hilfe von

capiinit stop
capiinit start
Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung