14.5. Mögliche Probleme und deren Lösung

Bei Problemen mit PCMCIA auf manchen Laptops oder mit bestimmten Karten lässt sich durch systematische Vorgehensweise der Fehler meist leicht eingrenzen und beheben. Zuerst ist herauszufinden, ob das Problem mit einer Karte zusammenhängt, oder ob ein Problem des PCMCIA-Basissystems vorliegt. Deshalb sollten Sie in jedem Fall den Computer zunächst ohne eingeschobene Karten starten. Erst wenn das Basissystem einwandfrei zu funktionieren scheint, wird die Karte eingeschoben. Alle Meldungen werden in /var/log/messages protokolliert. Deshalb sollte die Datei mit tail -f /var/log/messages während der Tests beobachtet werden. So lässt sich der Fehler auf einen der beiden folgenden Fälle einschränken.

14.5.1. Das PCMCIA-Basissystem funktioniert nicht

Wenn das System beim Booten bereits bei der Meldung PCMCIA: Starting services stehen bleibt oder andere merkwürdige Dinge geschehen, kann das Starten von PCMCIA beim nächsten Booten durch die Eingabe von NOPCMCIA=yes am Bootprompt verhindert werden. Um den Fehler weiter einzugrenzen, werden nun die drei Basismodule des verwendeten PCMCIA Systems von Hand nacheinander geladen.

Um die PCMCIA-Module per Hand nachzuladen rufen Sie als Benutzer root die Befehle modprobe pcmcia_core, modprobe yenta_socket und modprobe ds auf. In sehr seltenen Fällen muss statt yenta_socket eines der Module tcic, i82365 oder i82092 verwendet werden. Die kritischen Module sind die beiden zuerst geladenen.

Tritt der Fehler beim Laden von pcmcia_core auf, hilft die Manualpage pcmcia_core(4) weiter. Die darin beschriebenen Optionen können zunächst zusammen mit dem Befehl modprobe getestet werden. Als Beispiel können wir das Prüfen freier I/O-Bereiche verwenden. Vereinzelt kann diese Prüfung Ärger machen, wenn dadurch andere Hardwarekomponenten gestört werden. Das umgeht man mit der Option probe_io=0:

modprobe  pcmcia_core probe_io=0

Führt die gewählte Option zum Erfolg, wird in der Datei /etc/sysconfig/pcmcia die Variable PCMCIA_CORE_OPTS auf den Wert probe_io=0 gesetzt. Sollen mehrere Optionen verwendet werden, müssen sie durch Leerzeichen getrennt werden:

PCMCIA_CORE_OPTS="probe_io=0 setup_delay=10"

Wenn es beim Laden des Moduls yenta_socket zu Fehlern kommt, weist das auf grundlegendere Probleme wie etwa die Ressourcenverteilung durch ACPI hin.

Weiterhin werden die Dateien /etc/pcmcia/config und /etc/pcmcia/config.opts vom Cardmanager ausgewertet. Die darin gemachten Einstellungen sind teilweise beim Start des cardmgr und teilweise für das Laden der Treiber-Module für die PC-Karten relevant. In der Datei /etc/pcmcia/config.opts können auch IRQs, I/O-Ports und Speicherbereiche ein- oder ausgeschlossen werden. In seltenen Fällen bringt der Zugriff auf einen falschen I/O-Bereich das ganze System zum Absturz. In so einem Fall hilft es, diese Bereiche testweise einzuschränken.

14.5.2. Die PCMCIA-Karte funktioniert nicht richtig

Hier gibt es im Wesentlichen drei Fehlervarianten: Die Karte wird nicht erkannt, der Treiber kann nicht geladen werden oder die Schnittstelle, die vom Treiber bereitgestellt wird, wurde falsch eingerichtet. Man sollte beachten, ob die Karte vom Cardmanager oder von Hotplug behandelt wird. Der Cardmanager behandelt PC-Card-Karten und Hotplug behandelt CardBUS-Karten.

Keine Reaktion beim Einschieben einer Karte

Wenn beim Einschieben einer Karte keinerlei Reaktion des Systems erkennbar ist und auch ein manuelles cardctl insert nichts bewirkt, dann stimmt evtl. die Interruptzuordnung zu PCI-Geräten nicht. Häufig haben dann auch andere PCI-Geräte wie die Netzwerkkarte Probleme. In diesem Fall kann der Bootparameter pci=noacpi oder andere PCI- oder ACPI-Parameter helfen.

Die Karte wird nicht erkannt

Wenn die Karte nicht erkannt wird, erscheint in der Datei /var/log/messages die Meldung unsupported Card in Slot x. Diese Meldung besagt lediglich, dass der Cardmanager der Karte keinen Treiber zuordnen kann. Zu dieser Zuordnung werden die Dateien /etc/pcmcia/config bzw. /etc/pcmcia/*.conf benötigt. Diese Dateien sind sozusagen die Treiberdatenbank. Diese Treiberdatenbank lässt sich am leichtesten erweitern, wenn man vorhandene Einträge als Vorlage nimmt. Sie können mit dem Befehl cardctl ident herausfinden, wie die Karte sich identifiziert. Weitere Informationen dazu befinden sich im PCMCIA-HOWTO (Abschnitt 6) und in der Manualpage pcmcia(5). Nach der Änderung von /etc/pcmcia/config bzw. /etc/pcmcia/*.conf muss die Treiberzuordnung neu geladen werden; dies geschieht mit dem Befehl rcpcmcia reload.

Der Treiber wird nicht geladen

Eine Ursache hierfür besteht darin, dass in der Treiberdatenbank eine falsche Zuordnung gespeichert ist. Dies kann zum Beispiel daher kommen, dass ein Hersteller in ein äußerlich unverändertes Kartenmodell einen anderen Chip einbaut. Manchmal gibt es auch alternative Treiber, die bei bestimmten Modellen besser (oder überhaupt erst) funktionieren als der voreingestellte Treiber. In diesen Fällen werden genaue Informationen über die Karte benötigt. Hier hilft auch, eine Mailingliste oder den Advanced Support Service zu fragen.

Bei Cardbus-Karten muss man den Eintrag HOTPLUG_DEBUG=yes in die Datei /etc/sysconfig/hotplug einfügen. Daraufhin erhält man im Systemlog Meldungen, aus denen man erkennen kann, ob ein Treiber (erfolgreich) geladen wurde.

Eine weitere mögliche Ursache ist ein Ressourcenkonflikt. Bei den meisten PCMCIA-Karten ist es nicht relevant, mit welchem IRQ, I/O-Port oder Speicherbereich sie betrieben werden, aber es gibt auch Ausnahmen. Dann sollte man zuerst immer nur eine Karte testen und evtl. auch andere Systemkomponenten wie zum Beispiel Soundkarte, IrDA, Modem oder Drucker vorübergehend abschalten. Die Ressourcenverteilung des Systems kann man (als user root) mit dem Befehl lsdev einsehen. Es ist durchaus normal, dass mehrere PCI-Geräte denselben IRQ verwenden.

Eine Lösungsmöglichkeit ist, eine geeignete Option für das Kartentreibermodul zu finden. Diese läßt sich mit modinfo treiber herausfinden. Für die meisten Module gibt es eine Manualpage. rpm -ql pcmcia | grep man listet alle im Paket pcmcia enthaltene Manualpages auf. Zum Testen der Optionen können die Kartentreiber auch von Hand entladen werden.

Wenn eine Lösung gefunden wurde, kann in der Datei /etc/pcmcia/config.opts die Verwendung einer bestimmten Ressource allgemein erlaubt oder verboten werden. Auch die Optionen für Kartentreiber können in dieser Datei eingetragen werden. Soll zum Beispiel das Modul pcnet_cs ausschließlich mit dem IRQ 5 betrieben werden, wird folgender Eintrag benötigt:

module pcnet_cs opts irq_list=5
Das Interface wird falsch konfiguriert

In diesem Fall ist es empfehlenswert, die Konfiguration des Interfaces und den Namen der Konfiguration mit getcfg genau zu überprüfen, um Konfigurationsfehler auszuschließen. Dazu sollten in der Datei /etc/sysconfig/network/config der Variable DEBUG und in /etc/sysconfig/hotplug der Variable HOTPLUG_DEBUG jeweils der Wert yes zugewiesen werden. Bei anderen Karten oder wenn dies nicht hilft, gibt es noch die Möglichkeit, in das vom Cardmanager oder Hotplug aufgerufene Skript (siehe /var/log/messages) eine Zeile set -vx einzubauen. Dadurch wird jeder einzelne Befehl des Skripts im Systemlog protokolliert. Hat man die kritische Stelle in einem Skript gefunden, können die entsprechenden Befehle auch in einem Terminal eingegeben und getestet werden.


SUSE LINUX Administrationshandbuch 9.3