Autor Thema: I/O Ports, externe Geraete etc?  (Gelesen 7971 mal)

presswurst

  • Beiträge: 13
    • Profil anzeigen
Gespeichert
« am: 31. July 2007, 21:23 »
Hallo Community!

Ich habe ja schon einige Erfahrungen mit Lowlevel-Programmierung gemacht, was mir aber bis heute ein Raetsel ist sind IO-Ports und auf den Speicher gemappte geraete (?) wie zb. der Grafikspeicher an den mal ueber den normalen Arbeitsspeicher rankommt.

So wie ich das bisher verstanden habe sind das zwei ziemlich verwandte Themen.

Also, die Fragen die mich bewegen sind folgende: Wie findet man raus welche Speicherbereiche auf ein Geraet gemappt (?) sind? Wie kann man diese "verknuepfung" zwischen Geraet und Speicher aufheben bzw. herstellen?

Was fuer I/O-Ports sind fuer was genau gut? wie komme ich an die Vendor-ID eines Speziellen PCI-Geraetes heran? usw usf.

Wie ihr seht ist mein Wissen ueber diese beiden Themen mehr als lueckenhaft und ich wuerde mich ueber jede Informationsquelle oder Erklaerung freuen die mit diesen Themen zu tun hat.

Danke schonmal im vorraus!
lg, presswurst

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 31. July 2007, 21:29 »
Wie findet man raus welche Speicherbereiche auf ein Geraet gemappt (?) sind?
Es gibt die Standardgeräte, welche man immer an den selben Stellen im I/O- bzw. Speicheradressraum findet. Das wären zB der ISA DMA Controller, der VRAM im Textmodus, PIC, PIT, Floppy Controller, ...
Dann gibt es noch die Möglichkeit das über ISA PnP oder PCI herauszufinden.

Zitat
Wie kann man diese "verknuepfung" zwischen Geraet und Speicher aufheben bzw. herstellen?
Das macht normalerweise das BIOS für dich (durch ISA PnP und PCI) kann aber auch geändert werden (zumindest bei PCI bin ich da sicher).

Zitat
Was fuer I/O-Ports sind fuer was genau gut?
Um mit der Hardware zu kommunizieren.

Zitat
wie komme ich an die Vendor-ID eines Speziellen PCI-Geraetes heran?
siehe hier

edit: hatte die eine Frage übersehen.
« Letzte Änderung: 31. July 2007, 21:32 von bluecode »
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

presswurst

  • Beiträge: 13
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 01. August 2007, 13:13 »
Danke erstmal bluecode, das war schon sehr hilfreich, allerdings bleiben noch ein paar Fragen offen:


Zitat
Was fuer I/O-Ports sind fuer was genau gut?
Um mit der Hardware zu kommunizieren.

Ja, das war mir schon klar ;) - Allerdings meinte ich das etwas anders:
Einige Ports haben ja eine spezielle Aufgabe, so ist der Port ueber den man das A20-Gate freischaltet immer gleich. Gibt es vllt eine Liste mit Ports und was sich hunter ihnen verbirgt? also wozu "sie gut sind"?


Zitat
wie komme ich an die Vendor-ID eines Speziellen PCI-Geraetes heran?
siehe hier

Danke, auch das hat ein wenig licht ins Dunkel gebracht, allerdings auch nicht vollstaendig.

Man stelle sich folgende Situation vor: Ich moechte herausfinden ob in meinem PC ein bestimmtes PCI-Geraet vorhanden ist (Ein Geraet eines bestimmten Herstellers, um bei der Vendor-ID zu bleiben). Ich moechte nun rausfinden ob das Geraet vorhanden ist. Vllt gibst da auch ein Beispiel fuer?

Gibt es im Internet evtl auch noch andere Dokumente die sich mit I/O Ports befassen bzw. den x86-Anweisungen in und out?

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 am: 01. August 2007, 13:44 »
Gibt es vllt eine Liste mit Ports und was sich hunter ihnen verbirgt? also wozu "sie gut sind"?

Die Ports zu einem best. Device werden normalerweise in einem Tutorial zu Device besprochen, da der Inhalt der Ports nicht einheitlich ist, sondern vom device das daran hängt abhängig. Aber ich werd mich später mal hinsetzten und im wiki eine Liste mit den Standardports erstellen.


Man stelle sich folgende Situation vor: Ich moechte herausfinden ob in meinem PC ein bestimmtes PCI-Geraet vorhanden ist (Ein Geraet eines bestimmten Herstellers, um bei der Vendor-ID zu bleiben). Ich moechte nun rausfinden ob das Geraet vorhanden ist. Vllt gibst da auch ein Beispiel fuer?
Du liest einfach den Konfigurationsraum jedes "möglichen" Device (-> PCI device structure), d.h. du gehst von bus 0 device 0 function 0 bist bus 256 device 32 function 8 und schaust ob das device existiert (device.id != 0xFFFF && device.id != 0).
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

presswurst

  • Beiträge: 13
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 01. August 2007, 15:39 »
Achso, dann habe ich den Code auf der Seite doch nicht so falsch verstanden... Aber was ist denn die Function-Nummer? Dachte das ist etwas Geraetespezifisches was bei jedem Geraet ein anderes Verhalten ausloesen kann. Oder irre ich mich da?


Wenn es so funktioniert wie ich mir das bisher denke dann sollte dieser Schnipsel bewirken dass sobald ein Geraet auf dem Bus gefunden wird die Funktion dealWithIt() aufgerufen wird:

int bus, device;
unsigned int indowrd, outdword;

for (bus = 0 ; bus <= 0xff ; bus++) {

for (device = 0 ; device < 0x1f ; device++) {

outdword = 0x80000000 | (bus << 16) | (device << 11);
out32(0xcf8, outdowrd);

indword = in32(0xcfc) & 0xffff;
if (indword != 0 && indword != 0xffff) {
dealWithIt(bus, device);
}

}

}

Ist das so richtig?

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #5 am: 01. August 2007, 15:46 »
Aber was ist denn die Function-Nummer? Dachte das ist etwas Geraetespezifisches was bei jedem Geraet ein anderes Verhalten ausloesen kann. Oder irre ich mich da?

Jedes Gerät kann mehrere Funktionen haben (das sollte im Feld HeaderType oä stehen). Falls dies der Fall ist kann bei Funktion [1;7] auch noch eine PCI device structure sein. Andernfalls darf man die Funktionen [1;7] nicht untersuchen. Das wird zB von chipsets verwendet, welche mehrere Funktionen in einem Chip vereinen.

Jo, der Code schaut auf den ersten Blick korrekt aus.
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

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #6 am: 01. August 2007, 22:23 »
So. Ich hab gerade eben eine Liste von I/O Ports hier ins wiki gestellt. Serielle und parallele Schnittstelle hab ich bewusst weggelassen, da sind die Ports nämlich aus der BIOS Data Area auszulesen und soweit ich weiß nicht Standard.
Mehr Standardgeräte sind mir jetzt auch nicht eingefallen. Aber am wiki darf ja zum Glück jeder Frickeln :-D
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

presswurst

  • Beiträge: 13
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 01. August 2007, 22:52 »
Super - Da stehen auch noch gleich Informationen zu Festplatten und Diskettencontrollern drin, damit werde ich mich wohl befassen wenn ich mit PCI fertig bin, da weiss ich ja schonmal wo ich es finde :) - Danke

Also was die Funktionen betrifft habe ich es so verstanden: Wenn ein Geraet im 'header type' auf das vorhandensein von funktionen hinweist dann kann das uebergeben einer Funktionsnummer dazu fuehren dass die PCI Device Structure sich von Funktion zu Funktion unterscheidet? Kann ich mir das so vorstellen dass dieses Geraet mit hilfe der Funktionen mehrere virtuelle Geraete 'simuliert'?

Wie finde ich denn ueber den Header type heraus ob ein bestimmtes Geraet Funktionen unterstuetzt?

--

Auf jeden fall habe ich mir schonmal Teilweise einen Bootloader Programmiert der FAT12 unterstuetzt und nach dem laden einer Code-Datei in den PM wechselt und diese Datei ausfuehrt, damit werde ich dann wohl weitaus bequemer in der lage sein mit PCI ein wenig 'herumzuspielen' ;)

Also danke schonmal an dieser Stelle, wenn nochwas ist werde ich fragen ;)
« Letzte Änderung: 01. August 2007, 22:54 von presswurst »

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #8 am: 01. August 2007, 23:00 »
Wie finde ich denn ueber den Header type heraus ob ein bestimmtes Geraet Funktionen unterstuetzt?
Bit 7 (höchstes Bit) im Byte 14 muss gesetzt sein, damit es ein Multifunction device ist.

Zitat
[...] damit werde ich dann wohl weitaus bequemer [...]
*hust* grub *hust*
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 #9 am: 01. August 2007, 23:22 »
Zitat
*hust* grub *hust*
Du, taljeth usw. lebt wohl nach dem Lied "Das ist alles nur geklaut, alles gar nicht meine ..." :-P

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

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #10 am: 02. August 2007, 00:13 »


Don't ever do it!
« Letzte Änderung: 02. August 2007, 00:15 von bluecode »
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 #11 am: 02. August 2007, 12:07 »
@bluecode: Chef-Troll wenn ich bitten darf.

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

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 02. August 2007, 12:47 »
Du darfst nicht.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #13 am: 02. August 2007, 12:58 »
hehe ^^ Jetzt habe ich mich schon eine Stufe runter gearbeitet. Ist das nicht schön. ^^

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

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 02. August 2007, 13:11 »
Und jetzt noch eine. Gratuliere.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #15 am: 02. August 2007, 18:20 »
^^ Ach ja, ist das schön. ;-)

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

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 02. August 2007, 18:38 »
Wunderbar, wenn es dir gefällt. Dann belassen wir es doch einfach vorerst dabei. :)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

 

Einloggen