[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: OT: ioperm()



Hallo zusammen,

ich habe die Mails nicht von Anfang an mitbekommen, aber vielleicht ist es ja 
das was du suchst:

> > Mittels "ioperm" schalte ich den Zugriff frei, was jedoch nur als
> > ROOT moeglich ist.
> > Was muss ich machen, dass ich den "ioperm" auch als normaler User nutzen
> > kann?

--- Externes Programm lptout/lptout.c -> Wert auf LPT-Port ausgeben --- 

// Kompilieren: gcc -O2 -o lptin lptin.c
// Programm braucht set uid Bit
// Aufruf in C/C++ mit: system(lptout 888,int AusgabeWert); 

#include <asm/io.h>
#include <stdio.h>

int main(int argc, char* argv[]) {
int base=atoi(argv[1]);   // Basisadresse des LPT-Ports (888%=LPT1=378hex)

int value=atoi(argv[2]);   // Ausgabewert, Bitmuster

if(base!=888)exit(1);   // Sicherheitsabfrage(n)

ioperm(base,3,1);   // Zugriff auf die drei (zweiter Parameter) LPT_Adressen
	// BasisAdresse_(erster Parameter) = Datenregister
	// BasisAdresse+1 = Statusregister
	// BasisAdresse+2 = CtrlRegister
	// des LPT-Ports erlauben=1 (dritter Parameter)

outb(value,base);               //Bitmuster ausgeben
outb(1,base+2);         //Fallende Flanke in CtrlRegister erzeugen; dadurch 
wird Byte geschrieben
outb(0,base+2);
ioperm(base,3,0);               //Zugriff auf die Portadressen wieder 
verbieten
};

Ich hätte auch noch ein Beispiel für LPT-Einlesen.

Gruß Ulrich



Reply to: