Treiber(mal wieder)
-
Hallo!
Ich habe in letzter Zeit einige Erfahrung im Umgang mit Linux-Treibern gesammelt. Ich bin von der sehr einfachen Handhabe total begeistert.Alleine mit open,close,read,write und ioctl lässt sich so ziemlich jede Hardware benutzen.Das ganze ist ausserdem mit jeder Sprache(Perl,Java,C usw) möglich.
Nun ist windows ja leider doch etwas populärer und die Treiberunterstützung ist auch nicht vergleichbar. Da frage ich mich wie man(in c oder c++) auf Hardware unter windows zugreifen kann.
Ich habe schon gehört, dass neuere windows-versionen den Hardware Zugriff unterbinden oder beschränken.Es muß doch aber möglich sein aus einem Anwenderprogramm Treiber nutzen zu können.Die Illusion mit outb oder ähnlichen Funktionen direkt aus dem User-space auf Hardware zu zu greifen mache ich mir nicht
Ich wäre dankbar für Hinweise wie der Umgang mit Treibern von statten geht.
-
keks2 schrieb:
Alleine mit open,close,read,write und ioctl lässt sich so ziemlich jede Hardware benutzen.Das ganze ist ausserdem mit jeder Sprache(Perl,Java,C usw) möglich.
Nun ist windows ja leider doch etwas populärer und die Treiberunterstützung ist auch nicht vergleichbar.
Scheinbar ist das doch vergleichbar. Für jede der genannten Funktionen gibt es unter Windows eine Entsprechung. In der gleichen Reihenfolge: CreateFile, CloseHandle, ReadFile, WriteFile, DeviceIoControl.
Für spezielle Geräte, wie beispielsweise die serielle Schnittstelle oder auch HIDs, gibt es zusätzliche spezielle APIs. Aber dafür mußt Du dann etwas genauer werden. Diese zusätzlichen Funktionen sind normalerweise aber auch nur Wrapper um DeviceIoControl und sollen Dir nur das Leben etwas leichter machen.
-
Hallo King!
Ich habe von den Funktionen schon gehört.Aber funktionieren die auch mit neuen windows-versionen wie XP?Wenn das stimmt, muss es ja aehnlich wie unter linux Device Files Geben(COM1 und aehnliche).
FUnktioniert das also IN ETWA so:
Handle FileHandle;
char a=3;
FileHandle=CreateFile(COM1,O_RDWR);
WriteFile(FileHandle,&a);
Close(FileHandle);?
Unter Linux gibt es für jede Hardware einen oder mehrere entsprechende Device Files.Beispielsweise fb=Frambuffer,audio=na was schon,hda=festplatte usw.
Wie heissen die entsprechenden unter windows?EIne abschliessende Frage : Ist es egal welchen Compiler ich benutze?
-
Keks2 schrieb:
Ich habe von den Funktionen schon gehört.Aber funktionieren die auch mit neuen windows-versionen wie XP?
Selbstverständlich, das geht von 95 bis XP. Unterschiede gibt es leider unter Umständen beim zu verwendenen Namen: http://www.msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/device_input_and_output_control_ioctl_.asp?frame=true
Keks2 schrieb:
FUnktioniert das also IN ETWA so:
IN ETWA, ja. Die serielle Schnittstelle ist übrigens auch besonders gut dokumentiert: http://www.msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/communications_functions.asp
Keks2 schrieb:
Wie heissen die entsprechenden unter windows?
Zur Festplatte schau Dir den Link oben an. Zum Rest kann ich Dir nichts sagen, brauchte ich auch noch nie (wozu auch?).
Keks2 schrieb:
EIne abschliessende Frage : Ist es egal welchen Compiler ich benutze?
Das sind alles API-Funktionen. Damit sollte es egal sein.