Inhalt

3. Kompilierung, Installation 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. Im allgemeinen muß das Paket nur dann selbst kompiliert werden, wenn man eine neuere Version des PCMCIA-Paketes benötigt, weil erst diese einen bestimmten Treiber oder eine bestimmte Funktionalität besitzt, oder man eine andere Kernelversion installiert hat, als die, die mit der Distribution ausgeliefert worden ist. 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 beginnen kann:

Die neueste Version verlangt einen Kernel der Version 1.2.18 oder höher, oder ein Entwickler-Kernel 1.3.30 oder neuer. Version 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 Quellbaum des Linux-Kernels. Ein bereits übersetzter 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 folgenden Adressen erhältlich:

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 Verwendung von 2.1-Kerneln muß man sicherstellen, daß man die richtige Kombination an Libraries und Modulwerkzeugen einsetzt. 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 für Netzwerke zu aktivieren und die normalen Linux Ethernettreiber einschließlich der Treiber für »Pocket« und portable Adapter zu deaktivieren. Die PCMCIA-Netzwerkkartentreiber sind alle als ladbare Module implementiert. Jeder unnötig in den Kernel einkompilierte Treiber verschwendet nur Platz.

Wenn SLIP, PPP oder PLIP verwendet werden sollen, müssen die entsprechenden Treiber entweder in den Kernel einkompiliert werden oder die Treiber als Module geladen werden. In der Kernelkonfiguration der 1.2.x-Kernel ist es nicht möglich, Optionen wie SLIP-Kompression für ladbare Module zu aktivieren. Daher wird es hier wohl besser sein, SLIP direkt in den Kernel zu binden, wenn diese Funktionalität benötigt wird.

Soll ein PCMCIA-Token Ring Karte verwendet werden, so muß der Kernel mit der Option »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 Haupttreiber für die geplanten SCSI-Geräte wie Festplatten, Bandlaufwerke, CD-ROMs oder generische Devices aktiviert sein, wohingegen die Treiber für spezielle SCSI-Controller-Karten nicht benötigt werden.

Wenn Treiber des Kernels, die für die PCMCIA-Geräte benötigt werden, als Module übersetzt wurden, so ist die Datei /etc/pcmcia/config entsprechend zu modifizieren, so daß jeweils die benötigten Module für eine Karte geladen werden. Wenn zum Beispiel ein serieller Treiber modularisiert wurde, muß 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 X11 basierte Kartenstatusanzeige mit dem Namen cardinfo. Dieses Programm basiert auf der kostenlos vertriebenen Widgetbibliothek XForms, 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 X11 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, das ganze Unterverzeichnis in eine tar Datei zu schreiben und zum Zielcomputer zu kopieren, wo das Archiv dann im Root-Verzeichnis entpackt werden muß, um das PCMCIA-Paket an der richtigen Stelle zu installieren.

Wenn das Paket für einen andere Architektur, z.B. für einen Linux Rechner mit einer Alpha CPU, crosskompiliert werden soll, so kann ein anderer Compiler und Linker angegeben werden. Dies kann auch auf Systemen mit gemischtem a.out- und ELF-Formaten hilfreich sein. Auch wird das Skript nach zusätzlichen Optionen des Compilers für's Debugging 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 meistens aus dem laufenden Kernel 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 Anwendungsprogramme 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 in den Rechner 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 Daemon auf Anwenderebene überwacht, ob eine Karte eingeschoben oder entfernt wird. Dieser Daemon heißt cardmgr. Dieser ist ähnlich in der Funktion wie Barry Jaspans pcmdiad in früheren Versionen. cardmgr liest die 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 eventuell auf das eigene System angepaßt werden müssen. Sollten weitere Informationen benötigt werden, sollte die Manual 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 V Startskripts folgen

RedHat, 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 existiert, 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 einigen 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 Manual 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 angepaßt 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 Manual 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ßt normalerweise /usr/adm/messages oder /var/log/messages. Dies hängt von der Konfiguration des syslogd Daemons 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 nur dann vorhanden sind, wenn der Kernel entsprechend konfiguriert wurde. Zum Beispiel verlangt der SCSI-Kartentreiber, daß der Kernel mit SCSI-Unterstützung übersetzt wurde. Analog benötigt der Netzwerktreiber die Netzwerkunterstützung des Kernels. 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, daß die Module für eine andere Kernelversion als die aktuell auf dem System laufende übersetzt worden sind. Dieses 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 der PCMCIA-Module neu konfiguriert 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 in ein Kernel ohne diese Kontrolle geladen wird, so wird insmod sich über undefinierte Symbole beschweren.

Zum Schluß sind noch relativ neue Versionen der binutils inkompatibel mit den älteren Versionen der Modulwerkzeuge. Dies kann Inkompatibilitä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 Intel-kompatiblen Controllern nicht, wie z.B. Cirrus Chips und einige in IBM ThinkPads verwendeten Chips. Wenn ein Gerät während des Testvorgangs 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öglichen 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 Pollingmodus zu verwenden. Sowohl der i82365 als auch der tcic Treiber akzeptieren die Option poll_intervall=100, durch welche festgelegt wird, daß sie jede Sekunde Kartenstatus pollen. Diese Option sollte auch verwendet werden, wenn der Spielraum für freie Interrupts für den Gebrauch durch 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/config.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ß 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. Durch das von einigen Chipsätzen unterstützte BIOS »Shadowing« können ebenfalls Fehler 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. Die absolute Adresse 0xd0000 würde also z.B. 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 einer Linux-Distribution. In diesem Fall werden die PCMCIA-Module zum Teil direkt für die Installation benötigt, um z.B. über eine PCMCIA-Netzwerkkarte die Pakete der Distribution von einem Server zu beziehen.

PCMCIA ist heute Bestandteil der meisten Linux-Distributionen.

3.10 Warum ist das PCMCIA-Paket so groß?

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


Inhalt