Parallelport-Karte einrichten

Auf aktuellen bzw. modernen Mainboards ist standardmäßig normalerweise kein Parallelport mehr verbaut, da dieser von USB über die Jahre verdrängt wurde. Doch manchmal wird für spezielle Anwendungszwecke wie einen älteren Drucker, eine Relaiskarte oder die Modellbahn-Steuerung eine Parallelport-Schnittstelle benötigt. Und so greift man zu einer PCI-Karte - aber wie konfiguriert man diese unter Linux?

Die parallele Schnittstelle, auch bekannt als IEEE 1284, findet sich inzwischen fast auf keinem Mainboard mehr. Doch nicht nur im privaten Umfeld zur Ansteuerung von z.B. der Modellbahn sondern auch bei der geschäftlichen Anwendung mit beispielsweise einem Nadeldrucker wird weiterhin ein Parallelport benötigt. Abhilfe hierfür schafft eine Erweiterungskarte für PCI, PCI-X bzw. PCIe wie die Delock PCI Express Karte, 2x Parallel. Viele der auf dem Markt verfügbaren Parallelport-Karten werden direkt vom Linux-Kernel unterstützt und benötigen keine weitere Konfiguration. Doch gerade bei einem Hardware-Rollout kommt man gelegentlich in die Situation, dass eine Parallelport-Karte zum Einsatz kommt welche noch nicht von einer für den Unternehmenseinsatz optimierten Linux-Distribution unterstützt wird. Und auch wenn der Hersteller der Parallelport-Karte vielleicht einen Kernel-Treiber zur Verfügung stellt, so sind nachfolgende Schritte sicherlich immer empfehlenswert - denn funktioniert das Kernel-Modul der genutzten Linux-Distribution muss man sich nicht selbst um die Pflege und Wartung des Treibers bei Kernel-Updates kümmern.

Als erstes sollte unbedingt geprüft werden ob vielleicht schon bereits eine Gerätedatei wie /dev/parport0 vorhanden ist und somit keine weiteren Schritte erforderlich sind:

tux:~ # ls -l /dev/parport*
crw-rw----. 1 root lp 99, 0 Sep 26 03:16 /dev/parport0
crw-rw----. 1 root lp 99, 1 Sep 26 03:16 /dev/parport1

tux:~ #

Ist eine Gerätedatei vorhanden so kann mit der Einrichtung des am Parallelport angeschlossenen Geräts fortgefahren werden, also beispielsweise mit CUPS. Ist jedoch noch keine Gerätedatei vorhanden sollten die Informationen des PCI-Busses mit lspci ausgelesen werden.

tux:~ # lspci -v -nn
[...]
0a:00.0 Parallel controller [0701]: MosChip Semiconductor Technology Ltd. PCI 9865 Multi-I/O Controller [9710:9865] (prog-if 03 [IEEE1284])
Subsystem: Device [a000:2000]
Flags: bus master, medium devsel, latency 32, IRQ 15
I/O ports at ece0 [size=8]
I/O ports at ece8 [size=8]
Memory at dc0fc000 (32-bit, non-prefetchable) [size=4K]
Memory at dc0fd000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [48] Power Management version 2

0a:00.2 Parallel controller [0701]: MosChip Semiconductor Technology Ltd. PCI 9865 Multi-I/O Controller [9710:9865] (prog-if 03 [IEEE1284])
Subsystem: Device [a000:2000]
Flags: bus master, medium devsel, latency 32, IRQ 14
I/O ports at ecf0 [size=8]
I/O ports at ecf8 [size=8]
Memory at dc0fe000 (32-bit, non-prefetchable) [size=4K]
Memory at dc0ff000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [48] Power Management version 2

[...]
tux:~ #

Nicht alle Parallelport-Karten lassen sich zwangsläufig eindeutig als solche identifizieren; oftmals muss mit dem Ausschlussverfahren gearbeitet werden. Falls man die PCI-Karte selbst in den Computer einbaut empfiehlt sich zudem ein Blick auf die Beschriftungen der Mikrochips. Die weiteren Schritte hängen im Detail nun von der PCI-Karte bzw. dem Hersteller ab. In vielen Fällen ist die erste I/O-Adresse der eigentliche Parallelport, auch SPP genannt, die zweite I/O-Adresse das sogenannte "ECP/EPP Configuration Register". Hat die PCI-Karte zusätzlich vielleicht sogar noch serielle Ports, so sind weitere technische Informationen zwingend erforderlich - diese lassen sich beispielsweise im Handbuch oder auf der Webseite des Herstellers finden.

Für eine persistente Konfiguration sollten die benötigten Optionen für das Kernel-Modul in einer Konfigurationsdatei wie /etc/modprobe.d/parport.conf für modprobe hinterlegt werden. Im obigen Beispiel hat die PCI-Karte zwei parallele Schnittstellen, die kommasepariert angegeben werden können. Neben der I/O-Adresse sollte der IRQ zur Sicherheit immer mitangegeben werden; der Inhalt der Datei sieht dann folgendermaßen aus:

options parport_pc io=0xece0,0xecf0 irq=15,14

Anschließend kann mit modprobe das Kernel-Modul geladen werden. Zu beachten ist, dass der architekturspezifische Teil des Parallelport-Treibers in ein eigenes Kernel-Modul wie "parport_pc" ausgelagert worden ist, während die generischen Parallelport-Funktionalitäten im Kernel-Modul "parport" zu finden sind. Wird an späterer Stelle das Kernel-Modul "lp" für Druckunterstützung geladen, lädt dies wiederum das Kernel-Modul "parport_pc" nach. Dabei werden die Optionen der Konfigurationsdateien in /etc/modprobe.d/*.conf automatisch berücksichtigt.

tux:~ # modprobe parport_pc
tux:~ #

Hat alles geklappt findet sich in dmesg, /var/log/messages oder journalctl ungefähr folgende Ausgabe:

Sep 26 03:21:22 tux kernel: parport0: PC-style at 0xece0, irq 15 [PCSPP,TRISTATE,EPP]
Sep 26 03:21:22 tux kernel: parport1: PC-style at 0xecf0, irq 14 [PCSPP,TRISTATE,EPP]

Spätestens jetzt kann das am Parallelport angeschlossene Gerät eingerichtet werden, "parport0" deutet dabei (wie unter Linux üblich) auf die Gerätedatei /dev/parport0 hin. Im Falle der Verwendung eines Druckers mit CUPS wird das Kernel-Modul "lp" nachgeladen und beispielsweise /dev/lp0 sollte bei der Drucker-Konfiguration dann angegeben werden. Auch hier entlässt sich der exakte Gerätename dann einer Kernel-Meldung entnehmen.

Sep 26 03:21:22 tux kernel: lp0: using parport0 (interrupt-driven).
Sep 26 03:21:22 tux kernel: lp1: using parport1 (interrupt-driven).

Hat diese Anleitung zu keinem Erfolg geführt werden unter Umständen ein herstellerspezifischer Treiber oder abweichende Optionen beim Laden des Kernel-Moduls benötigt. Möglicherweise sieht der Hersteller im schlimmsten Fall auch gar keine Unterstützung von Linux vor. Letztendlich empfiehlt es sich spätestens an dieser Stelle auf den Hersteller der Karte bzw. des Mikrochips zuzugehen und die Details zu klären.