Weiter Inhalt

7. Tips für die Fehlersuche und Informationen zurProgrammierung

7.1 Wie kann ein hilfreicher Fehlerreport verschickt werden?

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:

Vor dem Abschicken des Fehlerreports sollte man sicher sein, daß die neuesten PCMCIA-Treiberpakete verwendet wurden. Es ist keine sehr gute Sache, die Zeit mit dem Lesen von Fehlerreporten zu verschwenden, wenn diese Fehler längst behoben 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.

7.2 Hilfe zur Fehlersuche auf niedrigster Stufe

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.

7.3 Wie schreibt man einen Treiber für eine neue Karte?

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.


Weiter Inhalt