IO Ports unter Linux

19/12/2015 - 22:16 von Thomas Orgelmacher | Report spam
Hallo Zusammen!

Port-IO unter Linux. Das letzte Mal habe ich Port-IO auf 'nem Z80
gemacht und das war alles Assembler.

Wo liegt der Unterschied zwischen Zugriff per /dev/port und den
Inlines in /usr/include/sys/io.h?

Ist das (abgesehen von der Performance, die bei /dev/ports natürlich
deutlich schlechter sein wird) nur die Tatsache, das ich bei /dev/port
auch unprivilegierten Prozessen Zugriff geben kann?

Muss ich mich da bei da bei 16Bit IO um die Endianess kümmern; resp.
unterscheidet sich das zwischen /dev/port und dem Kram in io.h?

Gibt es irgend etwas, das ich beachten muss?


Gruß, Thomas

I have seen things you lusers would not believe. I've seen Sun
monitors on fire off the side of the multimedia lab. I've seen
NTU lights glitter in the dark near the Mail Gate. All these
things will be lost in time, like the root partition last week.
 

Lesen sie die antworten

#1 Stefan Reuther
20/12/2015 - 12:35 | Warnen spam
Am 19.12.2015 um 22:16 schrieb Thomas Orgelmacher:
Wo liegt der Unterschied zwischen Zugriff per /dev/port und den
Inlines in /usr/include/sys/io.h?

Ist das (abgesehen von der Performance, die bei /dev/ports natürlich
deutlich schlechter sein wird) nur die Tatsache, das ich bei /dev/port
auch unprivilegierten Prozessen Zugriff geben kann?

Muss ich mich da bei da bei 16Bit IO um die Endianess kümmern; resp.
unterscheidet sich das zwischen /dev/port und dem Kram in io.h?



Die Funktionen in <sys/io.h> erzeugen Assemblerinstruktionen. Die sind
so nah an der Hardware dran wie nur irgend möglich, wenn die Hardware
also einen 16-bit-Buszyklus sehen will, kannst du ihn der direkt
verpassen. Dafür gibt's eben auch eins auf die Fresse^W^W^W^Weinen
Segfault direkt vom Prozessor, wenn die Instruktionen nicht
freigeschaltet sind (iopl, ioperm usw.)

/dev/port bastelt, wenn ich das richtig sehe[1], alle Zugriffe aus
8-Bit-Buszyklen zusammen. Ich meine, dass es durchaus Hardware gab, die
das nicht so mag.


Stefan


[1] http://lxr.free-electrons.com/sourc...mem.c#L574

Ähnliche fragen