Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: KtmnjjpfjsFvzG am 09. February 2013, 20:26
-
inb(0x7e) und inb(0x7f) crashen bei mir den Emulator... Das hab ich zufällig beim debuggen rausgefunden, als ich inb einfach irgendwelche Werte übergeben hab...
Warum? Sollte ich die in der inb-Funktion vielleicht sperren oder so? Oder ist das ein Fehler von QEMU?
-
also bei mir crasht qemu auch. wenn ich port 0x7f auslese. Ich frag mich nur, warum du das brauchst.
-
Brauch ich nicht, ich wollte nur wissen, ob das nur bei QEMU so ist, oder ob man das generell nicht darf, ist nicht so wichtig...
-
Du solltest nicht einfach so in den Ports herumpopeln. Viele der in dem PC verbauten Geräte haben ein paar Ports reserviert, und welche das sind, steht in den entsprechenden Dokumentationen oder unseren Wiki-Artikeln. Ports in den Zugriffsfunktionen zu verbieten macht keinen Sinn. Du solltest dich einfach nur an die Spezifikation der Geräte halten und nur auf Ports zugreifen, von denen du weißt, wie sie funktionieren.
-
OK. Gibt es eigentlich irgendwo eine Liste mit den "wichtigsten" Ports, also welche, die ganz oft genutzt werden?
-
Eine Übersicht gibt es hier: http://www.lowlevel.eu/wiki/Port
-
Hätte ich auch drauf kommen können... danke! :)
-
Ports im PC sind ein Relikt aus Urzeiten. Sorge dafür, dass du nur Ports ansprichst, bei denen du die angeschlossene Hardware kennst (oder dir ziemlich sicher bist). Ein crashender Emulator ist das eine, real zerstörte Hardware(*) das andere. Darum kannst du bei vernünftigen Bussystemen (wie PCI) fragen, welche Hardware existiert und welche Ports und Speicherbereiche sie benutzt.
(*) Nicht jede Hardware dekodiert die Adressen vollständig. Ein Zugriff auf einen Port X könnte also eine Hardware an Port Y verwirren. Bekannte Beispiele sind COM4 und NE2000-Netzwerkkarten, darum sind COM3/COM4 in den BSDs standardmäßig deaktiviert.
(**) Ein anderes Beispiel aus etwas modernerer Zeit, welches mir im Kopf rumgeistert, sind Intel-Ethernetkarten, die bei unpassenden Portzugriffen ihr EEPROM zerstören und dann nicht mehr funktionieren. Ganz aktuell sind Samsung-Laptops im UEFI-Modus, die ihre Firmware (BIOS) zerstören und dann eingeschickt werden dürfen.
-
Hi,
hat man denn noch andere Möglichkeiten als Ports und RealMode Interrupts, Hardware anzusprechen? :)
-
Ja, nennt sich MMIO (Memory-Mapped I/O). Wenn du die I/O-Ports einer Hardware in den normalen Speicher-Adressbereich einblendest, dann fühlen sich Hardwarezugriffe wie (vergleichsweise extrem langsame) Speicherzugriffe an. Das ist die moderne Variante. Portzugriffe sind prinzipbedingt langsam und Interrupts immer mit einem Kontextwechsel verbunden (für RM-Interrupts zusätzlich mit einem Moduswechsel), darum will man die nicht.