Wie funktionieren BIOS-Erweiterungen (Option ROMs)?

4242
RJSmith92

Wie funktionieren BIOS-Erweiterungen (Option ROMs)? Ich verstehe, dass ein installiertes Gerät über ein eigenes BIOS verfügt, das dem System Funktionen hinzufügt, aber ich bin nicht sicher, wie sie eingerichtet werden.

Ich lese weiter den folgenden Adressbereich 0x0C0000 bis 0x0F0000 wird verwendet, aber ich verstehe nicht, wofür dies verwendet wird. Es ist, als ob die ROMs unter dieser Adresse gespeichert sind, aber ich sehe nicht, wie das funktioniert. Was ist, wenn Sie 2 Geräte installiert haben, von denen erwartet wurde, dass sie sich auf 0x0C0000 befinden?

Dann springt das BIOS zum Option-ROM und beginnt von dort aus zu laufen. Meine nächste Frage ist, dass, wenn das ROM in die Interrupt-Vektortabelle schreibt und einen Interrupt einbindet, um auf sich selbst zu zeigen, auf welche Adresse verweist diese Adresse?

Auf einer VGA-Karte beispielsweise, an welche Adresse würde es INT 10h anschließen?

Oder wird das gesamte Options-ROM in einem Bereich zwischen 0x0C0000 und 0x0F0000 abgebildet, und der IVT würde auf irgendwo in diesem Bereich zeigen?

Ich weiß, das betrifft ältere Technologien, die nicht mehr verwendet werden (z. B. Interrupts), aber ich bin daran interessiert, wie sie funktionieren.

Wenn jemand helfen kann, die obigen Fragen zu beantworten oder nur einen kurzen Überblick zu geben, wäre es sehr dankbar,

Vielen Dank

4
Wo liest du das? Die einzige Möglichkeit, einem BIOS Funktionen hinzuzufügen, besteht darin, eine andere Firmware anzuwenden. Ramhound vor 10 Jahren 0
@Ramhound googelt einfach Option ROMs oder BIOS-Erweiterungen RJSmith92 vor 10 Jahren 0
Ich tat. Ich möchte wissen, was Sie genau lesen. Ramhound vor 10 Jahren 0

1 Antwort auf die Frage

6
psusi

In den IBM PC-Tagen musste jedes Gerät beim ISA-Bus einfach eine andere Adresse verwenden. Oft hatten sie Hardware-Jumper oder DIP-Schalter, mit denen Sie die Adresse ändern konnten, um Konflikte zu vermeiden. Mit dem Aufkommen des PCI-Busses werden Hardware-Adressen automatisch vom System-BIOS konfiguriert, um jedem Gerät eine eindeutige Adresse zuzuweisen.

Wenn der Oprom einen Interrupt einhakt, zeigt er auf eine Adresse innerhalb der zugewiesenen Adresse, unter der der Oprom lebt. Im Falle von VGA-Bios befand sich das normalerweise im 0xC0000-Block. Mit dem Debugger msdos können Sie die Interrupt-Vektortabelle auf den Einstiegspunkt überprüfen und die Anweisungen dort zerlegen, um zu sehen, was sie getan haben.

Vielen Dank. Bei den ISA-Karten würden Sie also manuell eine Adresse zwischen 0x0C0000 bis 0x0F0000 einstellen, damit sie nicht miteinander in Konflikt geraten. Bei PCI-Karten, die PnP sind, weist das BIOS automatisch einen Adressbereich für das Geräte-BIOS zwischen 0x0C0000 und 0x0F0000 zu. Ein Gerät hätte also zwei oder mehr Adressbereiche, es würde das ROM-BIOS für Interrupts in einen Bereich zwischen 0x0C0000 und 0x0F0000 abgleichen und ihm würden auch Adressen für MMIO zugewiesen, auf die über einen Treiber zugegriffen werden könnte. RJSmith92 vor 10 Jahren 0
Würde es beispielsweise eine moderne GPU beispielsweise noch das Video-BIOS zwischen 0x0C0000 und 0x0F0000 zuordnen und dann noch Adressen wie 0xE0000000 - 0xEFFFFFFF haben, die der Treiber für den Zugriff auf die Karte verwendet? RJSmith92 vor 10 Jahren 0
@ RJSmith92, ja, im Allgemeinen fordern Geräte nur Adressen im alten Bereich 0xC0000 bis 0xF0000 für Biosignale an und verwenden Adressen im Bereich 3-4 GB für MMIO. psusi vor 10 Jahren 1
Danke, letzte Frage, also bieten die Option-ROMs eine API, um über Interrupts auf die Hardware zuzugreifen? und eine Alternative dazu ist, direkt über einen Gerätetreiber auf die Hardware zuzugreifen? RJSmith92 vor 10 Jahren 0
@ RJSmith92, so ziemlich, ja. VGA-Bios-Hooks int 10h, die eine API für die grundlegende Textausgabe bieten, und Plattencontroller Hook int 13h, die grundlegende Lese- / Schreibschnittstellen für Festplatten bieten. Sie könnten für die Unterbrechungsliste von Ralph Brown nach den wichtigsten Details suchen. psusi vor 10 Jahren 1
Sorry, letzte Frage. Gibt es einen Grund, warum diese zugeordneten ROMs in Windows nicht angezeigt werden? Die Ressourcen, die meiner GPU im Geräte-Manager zugewiesen sind, zeigen beispielsweise die VGA-Adresse 0xA0000 - 0xbffff, nicht jedoch den der Karte für das Video-BIOS zugewiesenen Bereich C0000h bis C7FFFh. RJSmith92 vor 10 Jahren 0
@ RJSmith92, da Windows nicht im 16-Bit-Modus ausgeführt wird, ist kein Bios-Oprom erforderlich, daher wird die Zuweisung aufgehoben. psusi vor 10 Jahren 0
Was meinst du damit, es aufzuheben? Wenn Windows in den 32/64-Bit-Modus umschaltet, ist das Oprom immer noch C0000h bis C7FFFh zugeordnet, aber Windows meldet es einfach nicht? 0xA0000 - 0xbffff wird immer noch zugeordnet, warum also nicht die Option-ROMs. RJSmith92 vor 10 Jahren 0
@ RJSmith92, Windows deaktiviert das Mapping, da es nicht benötigt wird. psusi vor 10 Jahren 0
Danke, ich habe gerade ein Tool namens PCIScope gestartet, das Details zu allen Geräten auf dem PCI-Bus liefert. Es zeigte sich, dass das ROM für meine GPU 128 KB groß war und deaktiviert war. Ich gehe davon aus, dass Windows es nur dann deaktiviert, wenn es aufgezählt wird. Ich dachte zwar, dass Windows Int 10h für VBE verwendet hat, um den Begrüßungsbildschirm anzuzeigen oder ob er mit dem Vgasave-Treiber ausgeführt wurde? Müsste das ROM zu diesem Zeitpunkt nicht aktiviert werden? RJSmith92 vor 10 Jahren 0
@ RJSmith92, ja, wenn Sie den Basis-VGA-Treiber verwenden, sollte er aktiviert bleiben. Er wird jedoch nur zum Einstellen der Auflösung verwendet, nicht zum Zeichnen auf dem Bildschirm. psusi vor 10 Jahren 1
Hmmm, ich habe meine GPU deaktiviert und den VGA-Treiber ausgeführt, aber das ROM ist immer noch deaktiviert. Nicht ganz sicher, wie ein modernes Betriebssystem mit dem Video-BIOS funktionieren würde, da es sich im geschützten Modus befindet. RJSmith92 vor 10 Jahren 0
@ RJSmith92, wie ich schon sagte, es wird nur zum Umschalten der Modi verwendet, so dass es den Rest der Zeit deaktiviert werden kann. Es kann auch auf RAM kopiert und von dort ausgeführt werden. Wenn man bedenkt, dass die meisten Bios früher am Tag Optionen hatten, die Bios und Video-Bios in Ram zu beschatten. Nach dem Kopieren auf den RAM wurde es deaktiviert. psusi vor 10 Jahren 1