Der beste Weg, einen Fehlerreport zu versenden, besteht darin, die HyperNews-Mitteilungsliste der PCMCIA-Homepage zu verwenden. Auf diesem Weg können andere Anwender die aktuellen Probleme und deren Lösungen oder Vermeidung, falls möglich, sehen. Hier sind einige Dinge, die in einem Fehlerreport enthalten sein sollten:
probe
.
/etc/pcmcia
oder dem PCMCIA-Startskript gemacht wurden.
Wenn das Problem mit einem Kernelfehler einhergeht, so ist der
Registerausdruck nur dann hilfreich, wenn die fehlerhafte Adresse,
EIP, herausgefunden werden kann. Wenn diese im Hauptkernel liegt, kann
die Adresse dazu verwendet werden, mittels der Datei
System.map
die fehlerhafte Funktion herauszufinden. Wenn der
Fehler in einem ladbaren Modul liegt, ist diese Funktion ein wenig
schwieriger herauszufinden. Von den aktuellen Modulwerkzeugen wird
ksyms -m
die Basisadressen der Module anzeigen. Man nehme
dann das Modul, welches die EIP-Adresse enthält und subtrahiere
die Basisadresse von der EIP, um einen Offset innerhalb des Moduls zu
bekommen. Danach kann das gdb
Programm auf das Modul
angewendet werden. Mit dem list
Kommando kann dann dieser
Offset betrachtet werden. Dies wird aber nur funktionieren, wenn das
Modul mit der Option -g
zum Einbinden von
Debugginginformationen übersetzt wurde.
Wenn kein Zugang zum WWW besteht, können Fehlerberichte direkt an David Hinds geschickt werden. David bevorzugt es aber, daß diese Fehlerberichte direkt an die Website geschickt werden, da sie hier auch von anderen gelesen werden können.
Die PCMCIA-Module enthalten eine Menge Debuggingcode, der beim Übersetzen
eingebunden werden kann. Der meiste Code steht
unter Kontrolle der PCMCIA_DEBUG
Präprozessordefinition. Wenn diese undefiniert ist, wird der
meiste Fehlersuchcode nicht übersetzt. Wenn dieser Wert auf 0
gesetzt ist, wird dieser Code zwar übersetzt, ist jedoch
inaktiv. Größere Werte spezifizieren einen höheren
Grad der Mitteilungsbereitschaft. Jedes Modul, das mit
definiertem PCMCIA_DEBUG
übersetzt wurde, enthält
einen ganzzahligen Parameter pc_debug
, der die
Meldebereitschaft des Moduls bestimmt. Dieser kann während des
Ladens eines Moduls modifiziert werden, so daß die Ausgabe auf
Modulbasis angegeben werden kann, ohne daß der Code
neue übersetzt werden muß.
Es sind einige Werkzeuge zur Fehlersuche in dem Unterverzeichnis
debug_tools
der PCMCIA-Distribution enthalten. Die Programme
dumb_tcic
und dumb_i365
erstellen komplette
Registerauszüge der PCMCIA-Controller und entschlüsseln eine
Menge der Registerinformationen. Diese sind besonders hilfreich, wenn
man Zugang zu einem Datenblatt des zugehörigen Controller-Chips
hat. Das Programm dump_tuples
listet den Inhalt der CIS (Card
Information Structure) auf und entschlüsselt einige interessante
Bits. Mit dem Programm dump_cisreg
können die lokalen
Konfigurationsregister einer Karte angezeigt werden.
Der pcmem_cs
Speicherkartentreiber kann manchmal auch sehr
hilfreich sein. Dieser kann an irgendeine Karte gebunden werden und
hat keine Wechselwirkungen mit anderen Treibern. Er kann
verwendet werden, um direkten Zugriff auf den Attribut- oder
allgemeinen Speicher einer Karte zu erlangen.
Der Linux PCMCIA Programmer's Guide ist die beste Dokumentation der Linux-PCMCIA-Schnittstelle. Die neueste Version ist immer über FTP erhältlich bei
hyper.stanford.edu:/pub/pcmcia/doc
oder per WWW bei
http://hyper.stanford.edu/HyperNews/get/pcmcia/home.html
Bei Geräten, die den normalen ISA-Geräten nahe stehen, kann man wahrscheinlich einen Großteil der existierenden Linuxtreiber verwenden. In einigen Fällen wird der größte Brocken die Anpassung existierender Treiber sein, so daß diese das Hinzufügen und Entfernen der Geräte nach dem Booten handhaben können. Von den aktuellen Treibern ist der Speicherkartentreiber der einzige eigenständige Treiber, der nicht von den Teilen des Linux Kernels abhängt und so die meiste Arbeit leisten muß.
David hat einen Treiber als Grundgerüst für eigene Treiber geschrieben,
der mit einer Menge an Kommentaren erklärt, wie die Kommunikation
zwischen dem Treiber und den Card Services abläuft.
Dieser kann in der PCMCIA-Quelldistribution unter modules/skeleton.c
gefunden werden.