Der beste Weg einen Fehlerreport zu versenden besteht darin, die HyperNews Mitteilungsliste der PCMCIA Homepage zu verwenden. Auf diesem Weg können andere Leute die aktuellen Probleme sehen (und deren Lösungen oder Vermeidung falls möglich). Hier sind einige Dinge die in einem Fehlerreport enthalten sein sollten:
probe
/etc/pcmcia
oder dem PCMCIA Startskript gemacht wurdenWenn das Problem einen Kernelfehler entählt, 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 diser
Offset betrachtet werden. Dies wird aber nur funktionieren, wenn das
Modul mit der Option -g
zum Einbinden von
Fehlersuchinformationen übersetzt wurde.
Wenn kein Zugang zum WWW besteht, können Fehlerreporte direkt zu 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
übersetzungsabhängigen Fehlersuchcode. 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, daß 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
wechselwirkt nicht mit anderen Treibern. Er kann verwendet werden um
direkten Zugriff auf den Attribut- oder allgemeinen Speicher einer
Karte zu haben.
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 auf der 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 Linux Treiber 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 selbstenthaltene Treiber, der nicht von den Teilen des Linux Kernels abhängt und so die meiste Arbeit leisten muß.
David hat einen Gerüsttreiber geschrieben, der mit einer Menge an
Kommentaren erklärt, wie die Kommunikation zwischen dem Treiber
und den Card Services erklärt. Dieser kann in der PCMCIA
Quelldistribution unter modules/skeleton.c
gefunden werden.