Was läuft beim Einstecken einer PCMCIA-Karte ab
Ist die PCMCIA-Unterstützung geladen sieht man das per lsmod. Es müssen die Module pcmcia_core, ds und der PCMCIA-Bridgetreiber (i82365, yenta_socket, oder ähnlich) geladen sein. In /var/log/syslog (manchmal auch /var/log/messages) bekommt man z.B. folgendes zu sehen:
Sep 26 19:13:14 notebook kernel: Linux PCMCIA Card Services 3.2.5 Sep 26 19:13:14 notebook kernel: kernel build: 2.4.22 #13 Wed Sep 24 23:31:29 CEST 2003 Sep 26 19:13:14 notebook kernel: options: [pci] [apm] [pnp] Sep 26 19:13:14 notebook kernel: PnP: PNP BIOS installation structure at 0xc00fdbb0 Sep 26 19:13:14 notebook kernel: PnP: PNP BIOS version 1.0, entry at f0000:698f, dseg at f0000 Sep 26 19:13:14 notebook kernel: Intel ISA/PCI/CardBus PCIC probe: Sep 26 19:13:14 notebook kernel: PCI: No IRQ known for interrupt pin A of device 00:03.0. Please try using pci=biosirq. Sep 26 19:13:14 notebook kernel: Omega Micro 82C092G rev 00 PCI-to-PCMCIA at slot 00:03, port 0x3e0 Sep 26 19:13:14 notebook kernel: host opts [0]: none Sep 26 19:13:14 notebook kernel: host opts [1]: none Sep 26 19:13:14 notebook kernel: ISA irqs (scanned) = 3,4,7,9,11,15 status change on irq 15 Sep 26 19:13:14 notebook cardmgr[202]: watching 2 sockets
Beim Einstecken einer PCMCIA-Netzwerkkarte bekommt man z.B. folgendes in der /var/log/syslog zu sehen:
Sep 26 19:14:35 notebook cardmgr[203]: initializing socket 0 Sep 26 19:14:35 notebook cardmgr[203]: socket 0: NE2000 Compatible Ethernet Sep 26 19:14:35 notebook kernel: cs: memory probe 0x0d0000-0x0dffff: clean. Sep 26 19:14:36 notebook cardmgr[203]: product info: "PCMCIA", "Ethernet", "", "" Sep 26 19:14:36 notebook cardmgr[203]: function: 6 (network) Sep 26 19:14:36 notebook cardmgr[203]: executing: 'modprobe pcnet_cs' Sep 26 19:14:36 notebook kernel: cs: IO port probe 0x0100-0x04ff: excluding 0x1e0-0x1e7 0x208-0x20f Sep 26 19:14:36 notebook kernel: cs: IO port probe 0x0800-0x08ff: clean. Sep 26 19:14:36 notebook kernel: cs: IO port probe 0x0c00-0x0cff: clean. Sep 26 19:14:36 notebook cardmgr[203]: executing: './network start eth0' Sep 26 19:14:36 notebook kernel: eth0: NE2000 Compatible: io 0x300, irq 11, hw_addr 00:00:B4:4E:7E:37 Sep 26 19:14:36 notebook cardmgr[203]: + Fill with your own settings... Sep 26 19:14:36 notebook cardmgr[203]: + Hardware network card Sep 26 19:14:36 notebook cardmgr[203]: + /sbin/ifconfig eth0 up 192.168.1.98 netmask 255.255.255.0 broadcast 192.168.1.255
Den Ablauf steuert der cardmgr. Dieser erkennt, daß eine PCMCIA-Karte eingesteckt wurde. Beim Einstecken bekommt er einen Typ (Manufacturer-ID) und die Karteninfo als Information mit.
Mit dieser Kennung (in diesem Fall: Manufacturer ID = 0x0149, 0xc1ab, Karteninfo = "PCMCIA", "Ethernet") sieht er dann nach, ob in /etc/pcmcia/config einen Eintrag findet, der so aussieht:
... card "NE2000 Compatible Ehernet" version "PCMCIA", "Ethernet" manfid 0x0149, 0xc1ab bind "pcnet_cs" ...
Hier ist die Zeile mit manfid ... der Schlüssel. Daran erkennt der cardmgr eine unterstützte Karte. Er gibt den String nach card .... aus, wie es im obigen syslog-Ausschnitt zu sehen ist.
Randnotiz: Es gibt noch andere Vergleichsmöglichkeiten, aber das würde hier zu weit führen.
Als nächstes nimmt er den Eintrag, der in bind ... angegeben ist und sucht ihn in /etc/pcmcia/config und findet in diesem Beispiel:
... device "pcnet_cs" class "network" module "pcnet_cs" ...
Hier hat er das Gerät (engl.: device) pcnet_cs. In der darauf folgenden Zeile wird die zugeordnete Klasse (= network) und das nachzuladende Kernelmodul (hier: pcnet_cs) angegeben.
Der cardmgr laedt jetzt das Kernelmodul nach und startet das Script /etc/pcmcia/<Klasse> (in diesem Fall: /etc/pcmcia/network). In der Regel stehen in /etc/pcmcia/<Klasse>.opts die dazugehörigen Daten. Diese werden zu Angabe der Einstellparameter - bei Netzwerkkarten: IP-Adresse, Router, etc. - herangezogen.