Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: OsDevNewbie am 22. May 2013, 21:44

Titel: Welche Geräte gehören zu PCI?
Beitrag von: OsDevNewbie 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?
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: Svenska 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.
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: kevin 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. ;)
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: Svenska 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.
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: kevin 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.
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: Svenska 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.
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: OsDevNewbie 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?
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: streetrunner 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).
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: oern 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.
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: OsDevNewbie 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 (http://www.lowlevel.eu/wiki/PCI):
Es ist ja alles gut beschrieben, aber wie kann ich jetzt auf diese Geräte zugreifen bzw. ihnen Befehle senden?
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: Dimension 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.
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: Svenska 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 (http://www.lowlevel.eu/wiki/PCI):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
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: kevin 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.
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: OsDevNewbie 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?
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: OsDevNewbie 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.
Titel: Re: Welche Geräte gehören zu PCI?
Beitrag von: kevin 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.