Autor Thema: Treiber, aber wie?  (Gelesen 5234 mal)

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« am: 26. December 2005, 11:46 »
Hi,

also ich schreibe mir ja ein OS im PM. Jetzt wollte ich mal fragen wie das eigentlich so mit Treiber aus sieht. Bis jetzt habe ich z.B. den Tastaturtreiber im Kernel laufen. Aber das sind dann ja noch keine richtigen Treiber einbindungen. Die Treiber müssen ja im Ring Null laufen, nicht wahr? Aber wie genau geht das mit einer Treiber einbindung? Ich meine so wie z.B. bei Windows. Hardwarehersteller schreiben Treiber die in Windows eingebunden werden können. Aber wie genau geht so etwas überhaubt? Der Ring 0 erlaubt ja alles. Aber dann könnte man ja einfach einen schädlichen Code im Treiber schreiben und dadurch das ganze OS zum abstürtzen bringen. Also muss man doch irgendwie bestimmen dürfen was nicht gemacht werden darf. Ich wollte nur mal fragen wie das z.B. aussehen kann mit Treibereinbindungen.

Danke!!!
In the Future everyone will need OS-64!!!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 26. December 2005, 12:20 »
hi,

man kann Treiber sehr wohl auch in Ring3 laufen lassen, syscalls und I/O Permission Bitmap bzw. IOPL machens möglich. Wenn Treiber im Ring0 laufen können sie natürlich schadhaften Code enthalten, deshalb gibts bei Windows ja mitlerweile für "gute" Treiber Zertifikate.
"Also muss man doch irgendwie bestimmen dürfen was nicht gemacht werden darf" Das geht nicht wenn eine Anwendung in Ring0 läuft, es sei den du benutzt eine "sichere" Interpretsprache, welche nur indirekt die Möglichkeit eröffnet I/O mit Hardware zu machen, etc. Da solltest mal mit Legend oder Gohan reden, die wissen bestimmt mehr ;)

Wenn du den Linux Weg gehen willst dann erstellste innerhalb des Kernels ein en FS Treiber (devfs), bei dem sich die Treiber "registrieren", d.h. eine Datei erstellen (zB /dev/keyboard). Wenn jetzt eine Anwendung auf die Tastatur zugreifen will, dann öffnet sie die Datei /dev/keyboard und liest die Daten aus. Wenn eine Anwendung den Treiber konfigurieren will benutzt sie halt ioctl(). In Linux laufen auch alle Treiber in Ring0.
Über Windows hab ich leider keine/wenige Informationen: Ich glaub die verwenden intern auch so eine Art Dateisystem mit Treibern.

Hoffe ich konnte helfen :!:
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 26. December 2005, 12:24 »
Das ist momentan eines der Größten Probleme von Betriebssystemen! Kein "großes" OS hat eine komplette abschottung der Treiber da dieses zu viel Geschwindigkeit kostet. Wenn Treiber scheiße bauen hat man Pech gehabt. Man solte also nicht jeden "Treiber" installieren den man im INet feindet.
Wie du das in dienem OS realisierst bleibt dir vorbahalten.
db 0x55AA

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 am: 26. December 2005, 12:49 »
kleine Ergänzung: Ich halte es für den Aufwand nicht Wert Treiber im Ring3 laufen zu lassen. Ich habs in meinem letzten OS versucht, werd aber jetzt dann neu anfangen und des mit Sicherheit anders machen. Wie steht in den *en.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #4 am: 26. December 2005, 13:03 »
Danke. Jetzt habe ich noch eine ganz andere Frage. Ich wollte dafür kein neues Thema auf machen. Mein Betriebssystem untersützt ja Multitasking. Mit cli und sti kann ich interrupts sperren und wieder zu lassen. Aber der IRQ0 (Interrupt) sorgt ja für den Task-Switch. Dann könnte ein Programm ja einfach cli ausführen und damit das ganze Multitasking stoppen. Oder funktionieren die Befehle nur im Kernelmodus? Aber wenn treiber im Kernelmodus laufen können die dann ja immer noch alles stoppen. Hhmm...

Danke!!!
In the Future everyone will need OS-64!!!

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #5 am: 26. December 2005, 13:05 »
Hallo,

Ich werde meine Treiber wie normale Tasks behandeln und in Ring3 laufen lassen. Grundlegende Geräte wie DMA/FDD/HDD werden von nativen Kerneltreibern übernommen, die in Ring0 laufen.
Außerdem überlege ich, Schnittstellentreiber (COM/...) ebenso nativ im Kernel einzubauen und auf Ring0 laufen zu lassen. Neue Treiber, beispielsweise für Drucker, müssten dann nichtmehr direkt die Ports ansprechen (was sie auch nicht können), sondern nurnoch mit den Schnittstellen-Treibern arbeiten, genauso wie FS-Treiber mit den nativen Medientreibern (FDD/HDD/...) laufen.
Sollte trotzdem ein Gerät/Treiber direkt über einen Port kommunizieren, so muss dies über die API und den Kernel abgehandelt werden, wobei ich auch dort Mechanismen einbauen will, die das Übertragen vereinfachen.

Gruß,

Joachim
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #6 am: 26. December 2005, 13:34 »
Zitat von: bitmaster
Danke. Jetzt habe ich noch eine ganz andere Frage. Ich wollte dafür kein neues Thema auf machen. Mein Betriebssystem untersützt ja Multitasking. Mit cli und sti kann ich interrupts sperren und wieder zu lassen. Aber der IRQ0 (Interrupt) sorgt ja für den Task-Switch. Dann könnte ein Programm ja einfach cli ausführen und damit das ganze Multitasking stoppen. Oder funktionieren die Befehle nur im Kernelmodus? Aber wenn treiber im Kernelmodus laufen können die dann ja immer noch alles stoppen. Hhmm...
Danke!!!


cli/sti funktioniert nur mit cpl0. Gibt ein General Protection Fault (Int 13) mit cpl1/2/3.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

 

Einloggen