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.
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.
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.
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.
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.
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
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.