FRITZ!Card DSL SL unter RedHat Linux 9
(dürfte aber auch mit einigen anderen Distributionen funktionieren)
Andreas Huppert setzte sich mit den kürzlich erschienenen Treibern für den 2.6er Linux-Kernel auseinander und stellte das Howto freundlicherweise für die Veröffentlichung zur Verfügung.
FRITZ!Card DSL SL mit Linux Kernel 2.6.x Howto
0. Einleitung
Wie wohl viele andere Leute auch, habe ich gespannt die Linuxtreiber
für die FRITZ!Card DSL SL erwartet, die Ende August erschienen
sind, doch die Treiber sind leider nur auf SuSE Linux abgestimmt. Da ich
selbst kein Howto für die Installation der Karte unter anderen
Distributionen finden konnte, habe ich dieses kleine Howto
zusammengestellt. Alle beschriebenen Kommandos sollten als
root durchgeführt werden.
1. Voraussetzungen
Zum einen benötigt man das Treiberpaket fcdslsl-suse8.2-03.11.02.tar.gz
(bzw. eine neuere Version) von avm:
ftp://ftp.avm.de/cardware/fritzcrd.dsl_sl/linux/
sowie das capi4k-utils-Paket capi4k-utils-2003-06-16.tar.gz
(oder aktueller) von:
ftp://ftp.in-berlin.de/pub/capi4linux/
Was den Kernel angeht, so ist seinerseits CAPI 2.0 Unterstützung
erforderlich, der Standardkernel von redhat, hat diese integriert, Selberbauer
sollten darauf achten, dass im Konfigurationsmenü des Kernels unter
ISDN Subsystem -> Active ISDN Cards folgende Punkte aktiviert sind
(Weitere Treiber aus diesem Menü sind nicht nötig):
<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
Im Menü Network device support aktiviert man noch folgende Punkte:
<M> PPP (point-to-point protocol) support
[ ] PPP multilink support (EXPERIMENTAL)
<M> PPP support for async serial ports
<M> PPP support for sync tty ports
<M> PPP Deflate compression
<M> PPP BSD-Compress compression
<M> PPP over Ethernet (EXPERIMENTAL)
Um die EXPERIMENTAL
Punkte einblenden zu lassen ist im Menü
Code maturity level options die folgende Option erforderlich:
[*] Prompt for development and/or incomplete code/drivers
Sollten im Laufe der Installation oder beim Laden des Moduls fcdslsl.o
Fehlermeldungen der Art "CAPI Modul konnte nicht geladen werden" so ist
sehr wahrscheinlich die CAPI Unterstützung im Kernel deaktiviert.
2. Installation
2.1. capi4k-utils installieren
tar xzf capi4k-utils-2003-06-16.tar.gz
cd capi4k-utils
make
anchschließend erscheint ein Konfigurationsmenü, bei dem man
vor allem darauf achten sollte, dass man den richtigen Pfad zu den
Kernel-Sourcen angibt - unter Redhat: /usr/src/linux-2.4
- sowie darauf, dass man das pppdcapiplugin
mitkompiliert, das im Menü an unterster Stelle
defaultmäßig deaktiviert ist. Anschließend geht man auf
Exit, speichert die Einstellungen und wartet den Kompiliervorgang ab.
Nun installiert man die Tools.
make install
2.2. FRITZ!Card DSL SL Treiber übersetzen und installieren
tar xzf fcdslsl-suse8.2-03.11.02.tar.gz
cd fritz
make
make install
Anschließend muss man das SuSE-spezifische start/stop-Skript
load-fcdslsl abändern, damit es
unter RedHat funktioniert. Dazu habe ich die rc*-Aufrufe
auskommentiert... ist vielleicht noch nicht ganz professionell aber
es funktioniert damit. In der Datei install
macht man nun noch folgende Änderungen:
Vorher:
Zeile 103: opt_check_kernel=1
Zeile 104: opt_check_pppd=1
Zeile 301: drdsl
Nachher:
Zeile 103: opt_check_kernel=0
Zeile 104: opt_check_pppd=0
Zeile 301: ./drdsl
Der pppd muss natürlich in einer aktuellen Version vorhanden sein,
aber defaultmäßig findet das Skript den pppd nicht und bricht
ab, da unter RedHat /usr/sbin nicht in $PATH enthalten ist.
Alternativ zum Ändern der opt_check_pppd-Variable
kann man also auch einfach den Pfad mittels PATH=$PATH:/usr/bin
ändern.
Die beiden geänderten Dateien, habe ich auch zum Download
bereitgestellt
load-fcdslsl, install
Das install-Skript kopiert u.a. die Firmware der Karte in das Verzeichnis
/usr/lib/isdn. Man sollte sicherstellen, dass das Verzeichnis
auch tatsächlich existiert oder andernfalls an dieser Stelle selbst erzeugen
und anschließend das install-Skript im fritz-Verzeichnis starten:
./install
und fügt start/stop-links in /etc/rc.d/rcX.d hinzu z.B:
ln -s /etc/rc.d/init.d/load-fcdslsl /etc/rc.d/rc3.d/S60load-fcdslsl
ln -s /etc/rc.d/init.d/load-fcdslsl /etc/rc.d/rc4.d/S60load-fcdslsl
ln -s /etc/rc.d/init.d/load-fcdslsl /etc/rc.d/rc5.d/S60load-fcdslsl
ln -s /etc/rc.d/init.d/load-fcdslsl /etc/rc.d/rc3.d/K20load-fcdslsl
ln -s /etc/rc.d/init.d/load-fcdslsl /etc/rc.d/rc4.d/K20load-fcdslsl
ln -s /etc/rc.d/init.d/load-fcdslsl /etc/rc.d/rc5.d/K20load-fcdslsl
Somit werden die Treiber für die Karte bei jedem Systemstart
geladen und beim herunterfahren automatisch entfernt.
3. Internetverbindung mittels pppd aufbauen
Damit die Namensauflösung funktioniert musste ich die Datei
resolve.conf vom /etc/ppp-Verzeichnis ins
/etc-Verzeichnis linken:
ln -s /etc/ppp/resolve.conf /etc/resolve.conf
Außerdem benötigt man nun noch eine Einwahldatei, die man
unter /etc/ppp/peers ablegt.
Man kann auch mehrere Dateien für verschiedene Provider im
Verzeichnis anlegen.
z.B. /etc/ppp/peers/gmx
debug
sync
noauth
defaultroute
lcp-echo-interval 5
lcp-echo-failure 3
lcp-max-configure 50
lcp-max-terminate 2
noccp
noipx
persist
user GMX/YourAccount@online.de
hide-password
plugin capiplugin.so avmadsl
ipcp-accept-remote
ipcp-accept-local
usepeerdns
noipdefault
# Kompression abschalten
noaccomp
nopcomp
novj
novjccomp
nobsdcomp
nodeflate
noccp
# kein handshake
nocrtscts
local
noauth
lock
:
Das Feld user sollte natürlich abgeändert werden. Zuletzt
trägt man noch in /etc/ppp/pap-secrets
und /etc/ppp/chap-secrets die
Login/Passwort-Kobinationen für die Accounts in der folgenden Form
ein.
"login" * "password"
Nun kann man jederzeit mittels
/usr/sbin/pppd call gmx
die Internetverbindung herstellen. Idealerweise trägt man diesen
Aufruf auch in ein Startskript ein. Unter Redhat ist zu diesem Zweck die Datei
/etc/rc.local dafür gut geeignet, nur muss man dann dem Aufruf auch noch ein
tty übergeben, damit der pppd problemlos im Hintergrund läuft s. man pppd.
Sollen auch normale User die Verbindung herstellen können, muss evtl. das
suid-Bit beim pppd gesetzt werden.
Sollte die Verbindung nicht zustande kommen hilft ein Blick in die
/var/log/messages oder der Aufruf von drdsl im
fritz-Verzeichnis.
Die Verbindung lässt sich sehr gut mit dem Tool kadslwatch
überwachen, das avm
unter ftp://ftp.avm.de/tools/k_adsl_watch.linux/
anbietet. Die Installation ist sehr einfach und in dem Paket
dokumentiert.
4. Nützliche Links
Zu diesem Howto waren mir die folgenden beiden Texte eine große
Hilfe:
http://www.ossi-industries.de/document/fritzdsl_rh73.html
http://www.adsl4linux.de/howtos/rp-pppoe.php?PROVIDER=Hansenet&DIST=RH80
bzw. http://www.adsl4linux.de/howtos/
5. Probleme
5.1. Fritz Treiber kompiliert nicht mit neuerer 2.4er Kernelversion
Nach meinem Umstieg zu gentoo Linux und einem Kernelupgrade auf die Version
2.4.25 habe ich festgestellt, dass der Fritztreiber beim Aufruf von make
nicht mehr kompiliert. Die Meldung lautete bei mir im Detail:
fritz $ make
(cd src.drv; make CARD=fcdslsl)
make[1]: Entering directory `/home/martin/archiv/dsl/fritz/src.drv'
gcc -c -DMODULE -D__KERNEL__ -DNDEBUG -D__fcdslsl__ -DTARGET=\"fcdslsl\" -O2 -Wall -I /lib/modules/`uname -r`/build/include main.c -o main.o
In file included from /lib/modules/2.4.25-gentoo/build/include/linux/spinlock.h:7,
from /lib/modules/2.4.25-gentoo/build/include/linux/wait.h:16,
from /lib/modules/2.4.25-gentoo/build/include/linux/fs.h:12,
from /lib/modules/2.4.25-gentoo/build/include/linux/capability.h:17,
from /lib/modules/2.4.25-gentoo/build/include/linux/binfmts.h:5,
from /lib/modules/2.4.25-gentoo/build/include/linux/sched.h:9,
from /lib/modules/2.4.25-gentoo/build/include/asm/uaccess.h:8,
from main.c:28:
/lib/modules/2.4.25-gentoo/build/include/asm/system.h: In function `__set_64bit_var':
/lib/modules/2.4.25-gentoo/build/include/asm/system.h:192: warning: dereferencing type-punned pointer will break strict-aliasing rules
/lib/modules/2.4.25-gentoo/build/include/asm/system.h:192: warning: dereferencing type-punned pointer will break strict-aliasing rules
In file included from tools.h:30,
from main.c:42:
defs.h: At top level:
defs.h:85: error: redefinition of `irqreturn_t'
/lib/modules/2.4.25-gentoo/build/include/linux/interrupt.h:16: error: `irqreturn_t' previously declared here
make[1]: *** [main.o] Error 1
make[1]: Leaving directory `/home/martin/archiv/dsl/fritz/src.drv'
make: *** [drv] Error 2
Lösung:
Wenn man sich die Datei fritz/src.drv/defs.h ansieht
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
typedef void irqreturn_t;
...so bemerkt man, dass in Zeile 84/85 je nach Kernelversion irqreturn_t
definiert wird, was aber scheinbar auch schon in neueren 2.4er Kernelsourcen
gemacht wird... deshalb habe ich bei mir an der Stelle KERNEL_VERSION(2, 4, 23)
eingetragen - ich weiß jedoch nicht genau, ob die 2.4.23er Version
auch wirklich die erste Version war, bei der die Definition bereits enthalten war,
es war jedoch die erste, bei der ich das obige Problem beobachtet habe und das
sich auf diesem Weg lösen ließ.
5.2. load-fcdslsl startet nicht auf Anhieb
Bisher konnte ich die Ursache noch nicht lokalisieren, seit bei mir gentoo
Linux installiert ist muss ich jedoch load-fcdsl starten, stoppen und dann
nochmals starten, damit alles funktioniert... vielleicht liegt es aber auch
nur an lokalen Änderungen, die mir gerade nicht aufgefallen sind. Ich
arbeite noch dran... zur Zeit werde ich jedoch sehr stark von meiner
Diplomarbeit beansprucht. Wollte den Punkt nur erwähnen, vielleicht
hilft das auch bei dem ein oder anderem.
6. Danke an...
Andreas Huppert für den Hinweis zum ppp-Kernelsupport
2.9.2003 - Martin Wojtczyk - Last updated: 27.3.2004