Inhalt

3. Kompilierung, Intallierung und Konfiguration

3.1 Vorbemerkungen und Kernelkonfiguration

Vor dem Beginn sollte man darüber nachdenken, ob es wirklich erforderlich ist das PCMCIA Paket selber zu kompilieren. Die meisten Linux Distributionen werden mit einem vorkompilierten PCMCIA Treiberpaket ausgeliefert. Allgemein muß das Paket nur kompiliert werden, wenn man neue Funktionen der aktuellen Treiber benötigt oder wenn der Kernel derart modifiziert wurde, daß die in der Distribution mitgelieferten Treiber nicht mehr verwendbar sind. Das Kompilieren des PCMCIA Pakets ist technisch nicht schwierig, setzt allerdings eine gewisse Vertrautheit mit Linux voraus.

Die folgenden Dinge müssen installiert sein bevor man mit der Installation des Paketes beginnt:

Die neueste Version verlangt einen Kernel der Version 1.2.18 oder höher, oder ein Entwickler-Kernel 1.3.30 oder neuer. 1.3.38 funktioniert nicht und die Versionen 1.3.31 bis 1.3.36 sind nicht getestet worden. Es werden auch relativ neue Modulprogramme benötigt. Es gibt keine Kernel patches speziell für PCMCIA.

Man benötigt einen kompletten Linux Quellbaum des Kernels, ein fertiger Kernel allein genügt nicht. Das PCMCIA Modul enthält einige Referenzen auf Kernel Quelltexte. Während man einen neuen Kernel übersetzen will um unnötige Treiber zu entfernen, ist dies für die Installation von PCMCIA nicht notwendig.

Aktuelle stabile Kernelquellen und patches sind unter

http://sunsite.unc.edu/pub/Linux/kernel/v2.0
oder von
http://tsx-11.mit.edu/pub/linux/sources/system/v2.0
Aktuelle Modulwerkzeuge sind dort unter modules-2.0.0.tgz zu finden. Entwicklungskernel sind in den Entsprechenden v2.1 Verzeichnissen zu finden. Einige aktuelle Entwicklungskernel und Compiler arbeiten schlecht mit älteren Modulwerkzeugen zusammen. Bei der Verwendng von 2.1 Kerneln muß man sicher sein, daß man die Richtige Kombination an shared libraries und Modulwerkzeugen hat. Die neuesten Modulwerkzeuge sowie Versionen für ältere Kernel sind unter
http://www.pi.se/blox/modules
zu finden.

Wird der Einsatz einer PCMCIA Ethernetkarte geplant, so ist bei der Konfiguration des Kernels die Unterstützung eines Netzwerks zu aktivieren und die normalen Linux Ethernettreiber sowie die pocket and portable adapter zu deaktivieren. Die PCMCIA Netzwerkkartentreiber sind alle als ladbare Module implementiert. Derartige Treiber die in den Kernel kompiliert wurden verschwenden daher nur Platz.

Wenn SLIP, PPP oder PLIP verwendet werden sollen, so muß der Kernel mit diesen Funktionen konfiguriert werden oder über ladbare Module des Kernels realisiert werden. In der Kernelkonfiguration der 1.2.* Kernel ist es nicht mölich Konfigurationsoptionen wie SLIP Kompression für ladbare Module zu aktivieren. Daher wird es hier wohl besser sein SLIP direkt in den Kernel zu binden wenn man es benötigt.

Soll ein PCMCIA Token Ring Karte verwendet werden, so muß der Kernel mit Token Ring driver support übersetzt worden sein, wobei die Option CONFIG_IBMTR ausgeschaltet sein sollte.

Sollen PCMCIA IDE Karten verwendet werden, so sollte im Kernel CONFIG_BLK_DEV_IDE_PCMCIA aktiviert sein. Diese Funktion gibt es nur bei den Kerneln 1.3.72 bis 2.1.7. Ältere Kernel haben keine Unterstützung für wechselbare IDE Geräte, neuere Kernel benötigen keine spezielle Konfiguration.

Bei der Verwendung von PCMCIA SCSI Karten sollte in der Kernelkonfiguration CONFIG_SCSI aktiviert sein. Ebenso sollten die Haupt-Treiber für die geplanten SCSI Geräte (SCSI Festplatten, Bandlaufwerke, CD-Rom, generisch) aktiviert sein, wohingegen die Treiber für spezielle SCSI-Controller Karten nicht benötigt werden.

Wenn Treiber die für die PCMCIA Geräte benötigt werden als Module implementiert wurden, so ist die Datei /etc/pcmcia/config entsprechend zu modifizieren so daß diese Module für die richtige Karte geladen werden. Wenn zum Beispiel ein serieller Treiber modularisiert wurde, so kann die serielle Gerätedefinition wie folgt geändert werden:

device "serial_cs"
  class  "serial" module "misc/serial", "serial_cs"
Wenn der Kernel mit der Option CONFIG_MODVERSIONS (Kontrolle der Versionsnummer von Modulen) kompiliert wurde, so wird das Konfigurationsskript nach der Existenz der Datei /usr/include/linux/modversions.h, der Moduldatenbank, suchen. Diese wird erstellt, wenn im Kernelquellverzeichnis der Befehl make dep ausgeführt wird.

Dieses Paket enthält eine auf X basierte Kartenstatus Anzeige mit dem Namen cardinfo. Dieses Programm basiert auf dem frei vertriebenen Anwenderinterface mit dem Namen Forms Library, welche installiert sein muß wenn man cardinfo verwenden will. Eine binäre Version ist unter

hyper.stanford.edu:/pub/pcmcia/extras
sowohl im a.out als auch im ELF Format erhältlich. Es müssen zusätzlich alle gewöhnlichen X Headerdateien und Bibliotheken installiert sein.

3.2 Installation

Hier ist ein Übersicht des Installationsprozesses:

Während des Laufs von make config werden einige Konfigurationseinstellungen abgefragt und es wird überprüft ob das System für die Installation der PCMCIA Unterstützung entsprechend vorbereitet ist. In den meisten Fällen können die Standardeinstellungen verwendet werden. Für den Fall, daß Probleme auftreten ist es ratsam auf die Ausgaben dieses Programmes zu achten.

Wird das PCMCIA Paket für den Gebrauch auf einem anderen Computer kompiliert, so sollte ein anderes Installationsverzeichnis angegeben werden wenn danach gefragt wird. Dies sollte ein absoluter Pfad sein. Alle PCMCIA Dateien werden relativ zu diesem Pfad installiert. Danach ist man in der Lage den gesamten Verzeichnisbaum in eine tar Datei zu schreiben und zum Zielcomputer zu kopieren werden wo sie im root-Verzeichnis entpackt werden müssen, um das PCMCIA Paket an der richtigen Stelle zu installieren.

Wenn des Paket für einen anderen Computer kreuzkompiliert werden soll, so kann ein anderer Name für den Compiler und Linker angegeben werden. Dies kann auch auf Systemen mit gemischtem a.out und ELF Formaten hilfreich sein. Das Skript wird ebenfalls nach Kompilier- und Fehlersuchoptionen fragen.

Einige der Programme (cardctl und cardinfo) können entweder in der safe oder trusting Form kompiliert werden. Die safe-Form verhindert, daß nicht-root Anwender die Kartenkonfiguration ändern können. Die trusting-Form erlaubt normalen Anwendern Befehle abzusetzen um Karten anzuhalten, wiederanzufahren, zurückzusetzen und die aktuelle Konfiguration zu ändern. Das Konfigurationsskript wird nach einer der beiden Formen fragen. Die Voreinstellung ist safe.

Es gibt ein paar Einstellungen der Kernelkonfiguration, die Auswirkungen auf die PCMCIA Werkzeuge haben. Das Konfigurationsskript kann diese aus dem laufenden Kernel (meistens) herauslesen. Alternativ, wenn für einen anderen Computer kompiliert wird, kann diese Konfiguration aus einem Kernelquellcode Verzeichnisbaum herausgelesen werden oder sie können interaktiv abgefragt werden.

Das Durchlaufen von make all gefolgt von make install wird die Kernelmodule und Anwendunsprogramme erzeugen und installieren. Die Kernelmodule werden in /lib/modules/{version}/pcmcia installiert. Die Programme cardmgr und cardctl werden in /sbin installiert. Wenn cardinfo erstellt wird, so wird es in /usr/bin/X11 installiert.

Die Konfigurationsdateien werden in das Verzeichnis /etc/pcmcia kopiert. Wird über eine alte Version installiert, so werden die alten Kofigurationsdateien umbenannt, bevor die neuen installiert werden. Die alten Skriptdateien bekommen Endungen wie *.\ 1\ , *.\ 2\  und so weiter.

Wenn nicht bekannt ist welcher PCMCIA Controller Chip eingebaut ist, so kann die probe Funktion im Unterverzeichnis von cardmgr/ verwendet werden um den Chiptyp zu ermitteln. Es gibt zwei Hauptarten an Chips: Der Databook TCIC-2 Typ und der Intel i82365SL kompatible Typ.

Ein Dämon auf Anwenderebene überwacht ob eine Karte eingeschoben oder entfernt wird. Dieser Dämon heißt cardmgr. Dieser ist ähnlich in der Funktion wie Barry Jaspan's pcmdiad in früheren Versionen. cardmgr ließt eine Konfigurationsdatei /etc/pcmcia/config welche die bekannten PCMCIA Karten beschreibt. Es werden darin ebenso die zusätzlichen Module erwähnt die für den Gebrauch der PCMCIA-Karte notwendig sind und müssen eventuell auf das eigene System angepaßt werden. Für weitere Informationen sollte die man page weiterhelfen.

3.3 Abschluß der Installation bei Systemen die BSD Initskripte verwenden.

Einige Linux Distributionen, wie z.B. Slackware, verwenden eine BSD Anordnung der Systemstartskripte. Wenn die Datei /etc/rc.d/rc.M existiert, gehört das System zu dieser Gruppe. Das Skript rc.pcmcia, das in /etc/rc.d installiert ist, kontrolliert den Start und Stopp des PCMCIA Systems. make install verwendet das Kommando probe um den Chiptyp zu ermitteln und das Skript rc.pcmcia entsprechend anzupassen. Es sollte dann eine Zeile in der Startdatei /etc/rc.d/rc.M eingefügt werden, die das PCMCIA Startskript aufruft:

/etc/rc.d/rc.pcmcia start
Es ist nicht wichtig wo diese Zeile erscheint solange sie nach dem Start von syslogd steht.

3.4 Abschluß der Installation bei Systemen die den System VStartskripts folgen.

Red Hat, Caldera und Debian Linux haben Startskripts, die dem System V folgen. Wenn ein Verzeichnis mit dem Namen /etc/init.d oder /etc/rc.d/init.d existieren, gehört die Distribution zu dieser Gruppe. Das rc.pcmcia Skript wird dann entsprechend in /etc/init.d oder /etc/rc.d/init.d installiert. Es besteht hier keine Notwendigkeit irgendeine Startdatei zu editieren um PCMCIA zu aktivieren: Dies geschieht automatisch.

Wenn das Verzeichnis /etc/sysconfig existiert wird eine separate Konfigurationsdatei zum Starten als /etc/sysconfig installiert. Wenn in diesem Fall irgendwelche Moduloptionen (wie z.B. PCIC= oder PCIC_OPTS= Einstellungen) geändert werden sollen, so ist dies in dieser Datei einzutragen und nicht im Startskript. Bei Nachfolgenden Installationen wird diese Datei nicht überschrieben. Einige Systeme werden mit Systemkonfigurationsdateien ausgeliefert die PCMCIA per Voreinstellung deaktivieren (wie z.B. S.u.S.E.). Daher sollte der Inhalt solcher Dateien vorher überprüft werden (bei S.u.S.E.: /etc/rc.config).

Einige frühere Versionen verwendeten die PCMCIA-Skripte in /etc/sysconfig anstelle von /etc/pcmcia. Die aktuelle Version und zukünftige werden das Verzeichnis /etc/pcmcia auf allen Systemen verwenden. Existierende PCMCIA-Skripte in /etc/sysconfig werden nach /etc/pcmcia verschoben.

3.5 Computerspezifische Konfigurationsoptionen

Card Services sollte es automatisch vermeiden auf Ports und Interrupts zuzugreifen die von anderen Geräten verwendet werden. Es wird ebenfalls versucht Konflikte mit anderen unbekannten Geräten zu entdecken. Allerdings ist dies nicht absolut zuverlässig. In einigien Fällen müssen bestimmte Bereiche für einen Treiber explizit ausgeschlossen werden. Dies erreicht man über die Datei /etc/pcmcia/config.opts.

Hier sind einige Einstellungen für spezielle Notebooks:

Einige PCMCIA Controller haben optionale Eigenschaften die bei einigen Systemen eventuell implementiert sind. Es ist generell unmöglich für einen PCMCIA Treiber festzustellen ob diese speziellen Eigenschaften eingebaut sind. Man lese daher die man page des eingebauten Treibers für die möglicherweise implementierten und aktivierbaren Eigenschaften.

In wenigen Fällen ist das probe Kommando nicht in der Lage den Controllertyp automatisch zu ermitteln. Bei Halikan NBD 486 Systemen, die einen TCIC-2 Controller an einer ungewöhnlichen Stelle haben, muß die Datei rc.pcmcia editiert werden damit das tcic Modul geladen wird. Dabei muß der Parameter PCIC_OPTS auf tcic_base=0x02c0 gesetzt werden.

Die Treibermodule tcic und i82365 haben zahlreiche Parameter zur Behandlung der Busgeschwindigkeit welche für besonders schnelle Prozessoren angepasst werden müssen. Symptome für Geschwindigkeitsprobleme sind unter anderem Probleme der Kartenerkennung, Blockierung bei hoher Prozessorbelastung, große Fehlerraten oder schlechte Übertragungsraten der Geräte. Man kontrolliere die entsprechenden man pages für nähere Informationen. Hier ist eine kurze Zusammenfassung:

Alle diese Optionen sollten durch Modifizierung der Datei rc.pcmcia konfiguriert werden. Zum Beispiel:
# sollte entweder i82365 oder tcic sein
PCIC=i82365
# Geschwindigkeitsparameter des Treibers sollten hier stehen
PCIC_OPTS="cmd_time=12"
# pcmcia_core Optionen werden hier angegeben
CORE_OPTS="cis_speed=500"

Hier sind ein paar Geschwindigkeitseinstellungen für spezielle Systeme

Bei einigen Systemen die den Cirrus Controller verwenden, wie z.B. der NEC Versa M, versetzt das BIOS den Controller in einen speziellen Ruhemodus während des Einschaltens. Auf solchen Systemen wird das probe-Kommando keinen PCMCIA Controller entdecken. Wenn dies geschieht muß die Datei rc.pcmcia von Hand wie folgt abgeändert werden:
# sollte entweder i82365 oder tcic sein
PCIC=i82365
# Geschwindigkeitsparameter des Treibers sollten hier stehen
PCIC_OPTS="wakeup=1"

3.6 Probleme beim Laden der Kernelmodule

Das Konfigurationsskript stellt normalerweise sicher, daß die PCMCIA Module mit dem installierten Kernel funktionieren. Daher lassen sich Probleme mit dem Laden der Module meist darauf zurückführen, daß der Installationsvorgang nicht korrekt durchgeführt worden ist. Einige solcher Fehlermeldungen werden direkt auf der Linuxkonsole ausgegeben, andere werden in der Systemlogdatei aufgezeichnet. Diese heißen normalerweise /usr/adm/messages oder /var/log/messages. Dieses hängt von der Konfiguration des syslogd Dämons ab und wird in der Datei /etc/syslog.conf festgelegt. Um den Fehler einzugrenzen sollten dieses Log-Dateien genau untersucht werden. Auf diese Weise kann auch herausgefunden werden, welches Modul das Problem verusacht.

Einige der PCMCIA Module benötigen Kerneldienste, die mehr oder minder vorhanden sind, je nachdem wie der Kernel konfiguriert wurde. Zum Beispiel verlangt der SCSI Kartentreiber, daß der Kernel mit SCSI Unterstützung übersetzt wurde. Analog benötigt der Netzwerktreiber die Kernelnetzwerkunterstützung. Wenn dem Kernel die notwendigen Treiber fehlen kann es sein, daß sich insmod, mit der Begründung von undefinierten Symbolen, weigert ein Modul zu laden.

Wenn insmod von wrong version Fehlern berichtet, so bedeutet dies das die Module für eine ander Kernelversion als die aktuell auf dem System laufende übersetzt worden ist. Dies kann passieren, wenn die Module auf einem anderen Computer mit anderer Konfiguration übersetzt worden sind und auf den eigenen kopiert wurden oder wenn der Kernel nach der Installation von PCMCIA neukonfiguriert wurde.

Eine andere Fehlerquelle besteht darin, daß die Module und der Kernel mit unterschiedlichen Einstellungen von CONFIG_MODVERSIONS übersetzt worden sind. Wenn ein Modul mit Versionskontrolle neben einem Kernel ohne gleaden wird, so wird insmod sich über undefinierte Symbole beschweren.

Zum Schluß sind noch relativ neue binutils Versionen inkompatibel mit den älteren Versionen der Modulwerkzeuge. Dies kann Inkompatibiltäten der Module verursachen. Eine übliche Fehlermeldung in einem solchen Fall ist die Meldung, daß "gcc_compiled" nicht definiert sei. Wenn diese Fehlermeldungen erscheinen, sollte man auf die neuesten Modulwerkzeuge aufrüsten. Diese sind unter

http://www.pi.se/blox/modules
zu bekommen.

3.7 Interruptprobleme beim Wechsel des Kartenstatus

In den meisten Fällen wird der Treiber (i82365 oder tcic) automatisch einen Interrupt suchen und auswählen um den Kartenstatus anzuzeigen. Diese automatische Interruptsuche funktioniert bei einigen intelkompatiblen Controllern nicht, wie z.B. Cirrus Chips und einige in IBM ThinkPads verwendeten Chips. Wenn ein Gerät während des Probevorgangs inaktiv ist, kann es passieren, daß der Interrupt dieses Gerätes als frei erscheint. In solchen Fällen kann es passieren, daß dieser Interrupt vom Treiber verwendet wird.

Bei den i82365 und dem tcic Treibern kann die Option irq_mask verwendet werden um die mölichen Interrupts einzuschränken. Diese Maske schränkt den Satz der möglichen Interrupts, die für den Gebrauch mit PCMCIA Karten oder für die Anzeige von Kartenstatusänderungen verwendet können, ein. Die Option cs_irq kann ebenfalls verwendet werden um explizit den Interrupt festzulegen mit welchem der Wechsel des Kartenstatus überwacht wird.

Wenn ein funktionierender Interrupt nicht gefunden werden kann, so besteht die Möglichkeit einen Pollmodus zu verwenden. Sowohl der i82365 als auch der tcic Treiber akzeptieren die Option poll_intervall=100 mit welcher sie jede Sekunde den Kartenstatus bekannt geben werden (pollen). Diese Option sollte auch verwendet werden, wenn der Spielraum für freie Interrupts für den Gebrauch mit PCMCIA stark eingeschränkt ist. Insbesondere für Systeme mit mehreren PCMCIA Controllern ist die Zahl der Interrupts zur Anzeige der Statusinformationen der Karten stark eingeschränkt.

Alle diese Optionen sollten in der PCIC_OPTS= Zeile in der Datei rc.pcmcia gesetzt werden.

3.8 Probleme mit der Konfiguration des Speicherfensters

Per Voreinstellung reservieren sich die PCMCIA Treiber Speicherfenster im Bereich 0xc0000-0xfffff nach der Überprüfung dieses Bereiches auf den Gebrauch durch ROM oder andere Geräte. Dieses Fenster wird in der Datei /etc/pcmcia/conifg.opts definiert. Die Überprüfung dieses Bereichs wird durchgeführt, wenn ein Treiber versucht eine neue Karte zu konfigurieren. Dieser Prüfvorgang ist nicht Narrensicher, so daß nicht erkannte Probleme auftreten können. Wenn ein Speicherbereich erkannt wurde der von einem anderen Gerät verwendet wird, so kann es passieren, daß die Karte nicht korrekt erkannt wird. Mit Chipsätzen die es erlauben, können auch Fehler durch das BIOS shadowing in diesem Bereich entstehen. Wenn man feststellt, daß alle Karten fälschlicherweise immer als Speicherkarten erkannt werden, sollte man sichergehen, daß das BIOS shadowing beim Computer ausgeschaltet ist. Ein gutes Fenster zu finden erfordert manchmal einiges herumexperimentieren. Einige gute Fensteralternativen die man versuchen kann sind die Bereiche 0xd8000-0xdffff, 0xc0000-0xcffff und 0xc8000-0xcffff.

Wenn man DOS PCMCIA Treiber besitzt, kann man versuchen anhand dieser einen guten Speicherbereich herauszufinden. Es ist jedoch zu beachten, daß diese Adressen oft in Segmentform angegeben sind. Es fehlt in diesem Fall die letzte hexadezimale Ziffer (eine absolute Adresse von 0xd0000 würde als 0xd000 angegeben werden). Man sollte also darauf achten diese letzte Ziffer hinzuzufügen falls man solche Werte übernimmmt.

Wenn das Anpassen des Fensters im Speicherbereich das Problem der Kartenerkennung nicht löst, so liegt wahrscheinlich ein Geschwindigkeitsproblem (timing) vor.

3.9 Warum werden die PCMCIA Treiber nicht binär vertrieben?

Das vertreiben von binären Treibern ist schwierig, da einige Eigenschaften erst beim Übersetzen der Dateien angegeben werden können. Die PCMCIA Module hängen auch von der richtigen Kernelkonfigutation und -version ab. Daher müssten binäre Versionen zusammen mit passenden Kerneln vertrieben werden. Der größte Bedarf an vorübersetzten Modulen besteht bei der Installation von Grund auf. In diesem Fall werden die PCMCIA Module zum Teil direkt für die Installation benötigt.

PCMCIA ist heute Teil der meisten Linuxdistributionen.

3.10 Warum ist das PCMCIA Paket so groß?

Eigentlich ist das Paket nicht so groß. Alle Treibermodule zusammen benötigen weniger als 200KB an Speicherplatz auf der Festplatte. Mit den zusätzlichen Werkzeugen werden es zusätzlich weitere 70KB und das Verzeichnis /etc/pcmcia belegt ungefähr 30KB. Im Betrieb benötigen die Hauptmodule ungefähr 48KB Hauptstpeicher. Der cardmgr-Dämon wird generell direkt ausgelagert und nur beim Kartenwechsel aktiv. Das gesamte Paket belegt nicht mehr Platz als DOS Varianten.


Inhalt