www.mikrocontroller.net

Forum: PC-Programmierung Was genau macht ein Treiber?


Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie arbeitet überhaupt ein Treiber? Und wie ist dieser programmiert?

Autor: Nils (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wie arbeitet überhaupt ein Treiber? Und wie ist dieser programmiert?
Allgemein? Unter Windows? Unter Linux? Unter Mac?

Falls Du konkret Windows-Treiber und deren Programmierung meinst:
http://www.codeproject.com/KB/system/driverdev.aspx
http://www.codeproject.com/KB/system/driverdev2.aspx
http://www.codeproject.com/KB/system/driverdev3.aspx
...

An diesen Artikeln siehst Du die Komplexität Deiner Frage.

Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Konkret meine ich z.B. diesen Ausschnitt:
"Dazu nutzt es Schnittstellen zum Kommunikationsbus oder anderen 
Kommunikationssystemen, an denen das Gerät angeschlossen ist, um 
Steuersignale und/oder Daten zum Gerät zu senden bzw. von ihm zu 
empfangen. Auf der anderen Seite stellt es eine Schnittstelle für eine 
Nutzung dieser Funktionen durch das Betriebssystem oder 
Anwendungsprogramme bereit."

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also prinzipiell ein Programm (mit Assembler geschrieben?!), das mit der 
angeschlossenen Hardware kommuniziert. Und jeder Zugriff auf die 
Hardware ist gleichzeitig auch ein Aufruf einer Treiberroutine? Passt 
das so?

Jetzt frage ich mich allerdings, wie ein Treiber mit der Hardware 
kommuniziert. Ich meine, wenn ich eine Datei anlege, dann müsste der 
Festplattentreiber doch eine Routine dafür haben oder? Wie macht das ein 
Treiber? Wie wird zB eine Datei auf die Festplatte geschrieben. Hmmm

Autor: •••­­­­­­­­­­­­–––••• (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls Windows, siehe auch hier:
http://www.microsoft.com/whdc/DevTools/default.mspx

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lars schrieb:
> ...? Wie wird zB eine Datei auf die Festplatte geschrieben. Hmmm

Letzlich mit Befehlen der Art:

gehe zu Zylinder xxx.
schreibe beiliegende 512 Bytes in Sektor yy auf Seite y.

oder bei linearer Adressierung schreibe 512 Bytes in Block zzzz, dann 
kümmert sich die Festplatte um Zylinder, Seite und Sektor.

Um das Dateisystem, also DIR-Eintrag, Ordnerstruktur usw., kümmert sich 
ein Dateisystemtreiber (FAT, NTFS, CD), der dem physikalischen Treiber 
übergeordnet ist.

Andere Geräte wie z.B. Messwertkarten werden über Bus und Adresse 
angesprochen, z.B. PCI Bus 0 Gerät 5.

Gruss Reinhard

Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> mit Assembler geschrieben?!
Kann sein, muss aber nicht. C ist auch ganz üblich. Im Prinzip geht fast 
jede Programmiersprache. Skriptsprachen werden aber eher selten dazu 
verwendet ;-)

> das mit der angeschlossenen Hardware kommuniziert.
Genau. Und das Betriebssystem ist meistens auch noch beteiligt (weil es 
ja bei normalen Anwendungen verhindert, dass diese direkt mit der 
Hardware kommunizieren können).
Die meiste Hardware ist über irgendwelche standardisierte Busse (PCI, 
USB, ...) angeschlossen. Und das Betriebssystem bietet Schnittstellen 
an, mit deren Hilfe man was über diese Busse senden/empfangen kann.
Ich glaube, das gilt auch für Festplatten. Ich glaube, die hängen auch 
irgendwie an einer PCI-Bridge oder so was.

Diese vom Betriebssystem angebotene Schnittstelle muss jetzt natürlich 
auch irgendwie funktionieren. Es gibt da viele Wege:
- DMA: Speicherbereiche, auf die die Hardware zugreifen kann.
- Spezielle, virtuelle, Speicheradressen, die garnicht zum normalen RAM 
gehören sondern wo schreib-/lesebefehle vom Prozessor (oder Speicherbus) 
direkt an die Hardware geschickt werden.
- Spezielle Befehle im Befehlssatz des Prozessors

> Und jeder Zugriff auf die Hardware ist gleichzeitig auch ein Aufruf einer 
Treiberroutine?
Zugriff von wem?
- Vom Treiber: Kann natürlich auch intern wieder in Routinen aufgeteilt 
sein und diese dann aufrufen.
- Vom Betriebssystem: Ja, genau. Das Betriebssystem ruft eine 
Treiberroutine auf.
- Von der Anwendung: Ja, aber meistens nur indirekt über das 
Betriebssystem (Anwendung ruft Betriebssystemroutine und die ruft eine 
Treiberroutine auf).

Was ist eigentlich die Motivation für deine Frage?
Willst du einen Treiber schreiben (Vorsicht - ist nicht ganz einfach!)? 
Dann schau die Doku zum Betriebssystem und zur Hardware an.
Oder nur aus Interesse? Dann hoffe ich, meine Antwort hat weitergeholfen 
(und hat nicht zu viele Fehler).

Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich glaube, das gilt auch für Festplatten. Ich glaube, die hängen auch
irgendwie an einer PCI-Bridge oder so was.

Ich hatte anscheinend nur fast recht: IDE ja, SATA nein:

http://de.wikipedia.org/w/index.php?title=Datei:Ty...

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sebastians schrieb:
> Ich hatte anscheinend nur fast recht: IDE ja, SATA nein:

Hallo,

sowas ist nicht verpflichtend, genausogut kannst du die IDE an die 
Northbridge hängen oder Sata direkt an den Frontsidebus, du musst nur 
den Treiber entsprechend programmieren. Dafür hat man ihn ja.

Gruss Reinhard

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten.
Ja, also die Motivation ist folgende: ich möchte verstehen, wie ein 
Betriebssystem mit der Hardware kommuniziert. Dafür braucht es ja 
Treiber, die extra dafür programmiert sind.

Also findet die gesamte Kommunikation mit der Hardware über den 
Systembus statt, über bestimmte Speicheradressen? Was anderes kann eine 
CPU ja nicht, außer etwas in den Speicher zu schreiben. Das ist für mich 
so unverständlich irgendwie.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lars schrieb:
> Also findet die gesamte Kommunikation mit der Hardware über den
> Systembus statt, über bestimmte Speicheradressen?

Im Prinzip ja, beim X86 sind das zwar I/O-Adressen, aber die sind auch 
nichts anderes als Speicheradressen für einen speziellen Bereich.

Die serielle Schnittstelle COM1 belegte in der ursprünglichen Version 
die I/O-Adressen 3F8 bis 3FF. 3F8 war für die Daten da, wenn man da ein 
Zeichen A reinschrieb, wurde es über die serielle Leitung gesendet.

Gruss Reinhard

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob ein Treiber nun per memory-mapped io oder auf einer CPU mit 
speziellen I/O-Befehlen die Hardware anspricht ist nebensächlich. 
Vielmehr ist es gerade die Aufgabe eines Treibers von der konkreten 
Ansteuerung zu abstrahieren.

Ein sehr guter Tip zum lesen ist Andrew Tanenbaums Buch über 
Betriebssysteme. Dort sind solche Sachen detailliert erklärt.

Autor: Lars (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welches Buch von Tannenbaum?

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andrew Tanenbaum - Operating Systems Design and Implementation

Autor: Andreas Schweigstill (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lars schrieb:
> Tannenbaum

Tanenbaum, nicht Tannenbaum...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.