Parallelport-Zugriffe sind zumindest mit einem C-Programm auch direkt machbar:
Code:
#include <stdio.h>
#include <errno.h> /* error codes */
#include <sys/io.h> /* or <asm/io.h> */
int
main ()
{
const unsigned int b = 0x378; /* parallel port base (e. g. 0x3bc, 0x378 or 0x278), a wrong value may cause serious damage */
unsigned char i = 0;
iopl (3); /* allows access to all I/O-Ports, ioperm doesen't work above the 0x3ff-Limit */
outb (0x2b, b + 2); /* read (does normally work only for the status register) */
i = inb (b + 1);
printf
("Der Wert, der von Port 0x%hx (Status-Register des Parallelports) soeben gelesen wurde ist: 0x%hx\n\n",
b + 1, i);
i = inb (b);
printf
("Der Wert, der von Port 0x%hx (Daten-Register des Parallelports) soeben gelesen wurde ist: 0x%hx\n\n",
b, i);
i = inb (b + 2);
printf
("Der Wert, der von Port 0x%hx (Kontroll-Register des Parallelports) soeben gelesen wurde ist: 0x%hx\n\n",
b + 2, i);
iopl (0); /* release region */
exit (0);
}
In Büchern wie "Linux Gerätetreiber" findet man einiges dazu, wie z. B. dass man benachbarte 8-Bit-I/O-Ports durch einen 16-Bit-Zugriff ansteuern kann.
Ansonsten kann man auch die Geräte-Dateien in /dev eingeschränkt verwenden oder sich ein eigenes Kernel-Modul schreiben, dass die gewünschte Gerätedatei erzeugt (u. mit den gewünschten Funktionen versieht).
Lesezeichen