Ja, aber es ist selten nützlich. Auf 32-Bit-x86-Systemen können Sie den ioperm(2)
verwenden Systemaufruf, um den aktuellen Prozess so einzurichten, dass er Port-I/O direkt ausführen kann. Ich glaube, das funktioniert nicht auf 64-Bit-Systemen. Du kannst auch lseek/read/write
machen Kombinationen gegen /dev/port
und ich denke, das ist ebenfalls nicht sehr portabel. Weitere Einzelheiten finden Sie unter http://tldp.org/HOWTO/IO-Port-Programming-2.html. Diese beiden Ansätze sind natürlich viel langsamer und weniger flexibel als das Schreiben eines Gerätetreibers (/dev/port
am langsamsten). Keiner dieser Userspace-Mechanismen erlaubt Ihnen natürlich, Interrupts oder ähnliches zu handhaben. Wenn die Leistung ein Problem ist, werden Sie am Ende einen Gerätetreiber schreiben.
Ihre Vermutung ist richtig. Der Kernel ist die einzige Software, die Hardwareanfragen senden kann. Das gilt nicht nur für Linux. Praktisch kein neueres Betriebssystem als DOS lässt Sie direkt auf die Hardware zugreifen, weil es, wie Sie auch vermuten, ziemlich gefährlich ist.
Es ist jedoch kein Problem, einen eigenen Treiber zu schreiben, und es ist eine Menge Dokumentation verfügbar. Zum Beispiel scheint dieses Tutorial bei xatlantis eine aktuelle (das ist wichtig!) und gute Quelle zu sein.