GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kann direkt aus dem User Space auf die Hardware zugegriffen werden?

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.


Linux
  1. Wie greife ich (wenn möglich) auf den Kernel-Space aus dem User-Space zu?

  2. Nach der Installation von Jenkins kann Benutzer Jenkins nicht aufgerufen werden

  3. Kann ich Linux von einer VHD booten?

  4. Wie kann ich einen Nicht-Login-Benutzer erstellen?

  5. Das Linux-Benutzerkonto kann nicht entsperrt werden

Meine Linux-Geschichte:Vom Linux-Benutzer zum Mitwirkenden

Wie entferne ich Swap Space von Centos 7.x?

Kernel-Stack und User-Space-Stack

Entfernen Sie Leerzeichen aus Dateinamen in Linux

Wie kann ich ein Verzeichnis vom Befehl ls ausschließen

Wie kann ich die Active Directory-Benutzerattribute von einem Linux-Computer auflisten?