Autor Thema: Welche Geräte gehören zu PCI?  (Gelesen 5664 mal)

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« am: 22. May 2013, 21:44 »
Hallo,
ich wollte mal fragen, welche Geräte denn alle PCI benutzen (also z.B. ATA, USB, etc.). Ich versuche nämlich einen PCI-Treiber zu schreiben, um damit dann auf das CD-ROM Laufwerk oder die Festplatte zuzugreifen. Geht das überhaupt so?
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 23. May 2013, 00:39 »
Alle Geräte sind PCI-Geräte. Ausnahmen bestätigen die Regel und sind Legacy-Devices.

Mit einem PCI-Treiber kannst du nicht auf die Festplatte zugreifen. Aber du kannst den PCI-Treiber verwenden, um den Festplattentreiber (bzw. IDE-/SATA-Controllertreiber) zu schreiben.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 23. May 2013, 09:45 »
Alle Geräte sind PCI- oder USB-Geräte. Ausnahmen bestätigen die Regel und sind Legacy-Devices.
Hab da mal einen wichtigen Fix eingebaut und vermute, dass immer noch was fehlt. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 23. May 2013, 12:35 »
Stimmt, wobei man jetzt argumentieren könnte, dass der USB selbst auch wieder ein PCI-Gerät ist. :evil:
Auf dem PC gibt es zusätzlich noch einen Haufen ACPI-Geräte und Sensoren werden z.B. via I²C angebunden.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 23. May 2013, 12:48 »
Wenn man keinen Wert auf Korrektheit legt, kann man das. Der USB-Hostcontroller ist üblicherweise ein PCI-Gerät, aber nicht mein USB-Stick.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 24. May 2013, 00:45 »
Der USB-Hostcontroller ist üblicherweise ein PCI-Gerät, aber nicht mein USB-Stick.
Ich habe auch nicht geschrieben, dass man mit einem PCI-Treiber auf deinen USB-Stick zugreifen kann. :-D Aber ohne PCI-Treiber kannst du keinen USB-Hostcontrollertreiber schreiben und ohne den wiederum kommst du nicht an deinen USB-Stick. (Die Legacy-Emulation mal ausgenommen.)

Fassen wir zusammen: Die meisten Geräte im PC brauchen mindestens einen PCI-Treiber, um benutzbar zu sein.

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #6 am: 24. May 2013, 22:25 »
Mit einem PCI-Treiber kannst du nicht auf die Festplatte zugreifen. Aber du kannst den PCI-Treiber verwenden, um den Festplattentreiber (bzw. IDE-/SATA-Controllertreiber) zu schreiben.
Irgendwie verstehe ich das nicht ganz, kannst du das bitte genauer erklären?
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

streetrunner

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 24. May 2013, 22:58 »
Das ist vielleicht etwas schlecht ausgedrückt: Deine Festplatte hängt am SATA-Controller, und dieser ist wiederum via PCI(e) ans System angebunden. Wenn du nun deinen SATA-Controller ansprechen willst brauchst du einen PCI-Treiber. Damit kannst du dem Controller sagen was er tuen soll (vereinfacht gesagt).

oern

  • Beiträge: 44
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 25. May 2013, 11:15 »
Wenn man keinen Wert auf Kompatibilität legt und den PCI-Treiber eh nur benutzt, um an Port- und Speicheradressen und den Interrupt zu kommen bzw. eine Liste der angeschlossenen Geräte zu bekommen, kann man die Werte auch erst einmal hartkodieren, spätestens, wenn man das Betreibssystem auf mehr als einem Rechner laufen lassen will, gibt es dann aber wahrscheinlich Probleme.

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #9 am: 25. May 2013, 17:31 »
Also ist es damit dann möglich, dem SATA-Controller zu sagen er soll die Daten in den Speicher laden, also das DMA-System von PCI nutzen? Ich habe nämlich gehört, dass dies mit fragmentierten Speicherbereichen arbeiten kann.

Noch einen Wunsch zu diesem Artikel hier:
Es ist ja alles gut beschrieben, aber wie kann ich jetzt auf diese Geräte zugreifen bzw. ihnen Befehle senden?
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Dimension

  • Beiträge: 155
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 25. May 2013, 22:05 »
Also ist es damit dann möglich, dem SATA-Controller zu sagen er soll die Daten in den Speicher laden, also das DMA-System von PCI nutzen? Ich habe nämlich gehört, dass dies mit fragmentierten Speicherbereichen arbeiten kann.
DMA arbeitet mit physischen Speicheradressen. Der Treiber muss virtuelle Adressen zuerst umwandeln oder gleich physische Speicherbereiche anfordern. Der physische Speicher muss zusammenhängend sein, eventuell reichen auch eine einzelne 4KB-Pages.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 26. May 2013, 00:43 »
Also ist es damit dann möglich, dem SATA-Controller zu sagen er soll die Daten in den Speicher laden, also das DMA-System von PCI nutzen? Ich habe nämlich gehört, dass dies mit fragmentierten Speicherbereichen arbeiten kann.
Du meinst Scatter-Gather-Transfers. Nicht jedes Gerät kann das. Wenn dein SATA-Treiber erstmal funktioniert, kannst du darüber nachdenken, solche Transfers einzubauen - bis dahin solltest du das lassen. Ansonsten gilt das, was Dimension dazu gesagt hat.

Noch einen Wunsch zu diesem Artikel hier:Es ist ja alles gut beschrieben, aber wie kann ich jetzt auf diese Geräte zugreifen bzw. ihnen Befehle senden?
Vom PCI-Treiber erfährst du die Port- und Speicheradressen, an denen das Gerät deine Kommunikation erwartet. Wie diese Kommunikation aussieht, hängt vom Gerät ab, dafür gibt es dann Extra-Spezifikationen.

PCI ist die Grundlage für Treiber, die PCI-Hardware ansteuern wollen. Nicht mehr und nicht weniger.

Gruß,
Svenska
« Letzte Änderung: 26. May 2013, 11:19 von Svenska »

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 26. May 2013, 13:41 »
Busmaster IDE hatte von Anfang an Scatter/Gather-Listen, dass die unterstützt werden kann man also zumindest für Platten ohne weiteres annehmen. Für die Interfaces sollte man das sowieso, wenn irgendeine Hardware das dann nicht kann, muss der Treiber es eben in mehrere Requests aufspalten.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #13 am: 28. May 2013, 17:51 »
PCI ist die Grundlage für Treiber, die PCI-Hardware ansteuern wollen. Nicht mehr und nicht weniger.

Also brauche ich dann einen PCI-Treiber für einen SATA-Treiber oder für einen IDE-Treiber?
« Letzte Änderung: 30. May 2013, 20:43 von OsDevNewbie »
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #14 am: 10. June 2013, 16:25 »
Hallo,
noch eine Frage, wo finde ich denn diese Spezifikationen für die einzelnen Geräte?
Danke für die bisherige Hilfe.
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 10. June 2013, 20:14 »
Bei ein paar Standardgeräten sind sie in unserem Wiki verlinkt. Ansonsten entweder auf der Homepage des Herstellers, oder durch per Google aufgespürte - öhm, ich sag mal, dezentrale Sicherheitskopien nicht offensichtlich für die Öffentlichkeit gedachter Dokumente, oder einfach gar nicht. Sortiert von selten nach häufig.

Existierende Open-Source-Treiber lesen kann eine Lösung sein, wenn es keine Dokumentation gibt, aber da muss man sich natürlich an die jeweilige Lizenz halten oder extrem aufpassen, dass man nichts kopiert bzw. direkt nachschreibt.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen