Lowlevel

Lowlevel => OS-Design => Thema gestartet von: Sannaj am 22. December 2011, 17:34

Titel: Verrückte Idee
Beitrag von: Sannaj am 22. December 2011, 17:34
Mir ist grad eine ziemlich verückte Idee gekommen:
Und zwar:
Was haltet ihr davon, wenn ich ein Programm schreibe, das das BIOS und die IVT ausließt und den BIOS Code (Besonders die wichtigen Teile) dann so umschreibt, das er auch im PM läuft (Addresse müssen natürlich relokalisiert werden und Segmentladebefehle werden durch Interrupts ersetzt.)

Was haltet ihr davon?
Titel: Re: Verrückte Idee
Beitrag von: Svenska am 22. December 2011, 17:54
Relativ wenig.

Das BIOS besteht aus Modulen (vgl. "Award Modular BIOS"), die einzeln komprimiert werden und über bestimmte Schnittstellen (z.B. Interrupts) mit dem Hauptmodul kommunizieren. Das ganze möchtest du automatisch reimplementieren. Ich vermute, es gibt Gründe, warum solchen Techniken nicht universell existieren (eher wird eine Emulation der bekannten Umgebung bereitgestellt).

Mich würde interessieren, um was es dir da im speziellen geht? Dein Code muss ja irgendwie ausgeführt werden und braucht dazu schon die Dienste des BIOS (im 16-Bit-RM). Den int13 brauchst du nicht, wenn du einen eigenen Plattentreiber hast (und ein paar hässliche Einschränkungen hat der BIOS-Treiber auch) und auch der int10 ist zu beschränkt, als dass der Aufwand sich lohnen würde (dann portiere lieber einen angepassten Grafiktreiber als ein universelles, langsames, beschränktes BIOS). Zumal das Video-BIOS ja nicht Teil des BIOS ist, sondern zur Grafikkarte gehört und nur teilweise 16-Bit-RM spricht.

Moderne Grafiktreiber sprechen die Grafikkarte auch immer über das VBIOS an (z.B. AtomBIOS), um nicht für jede potentielle Grafikkarte die GPIO-Adressen zu kennen.

Gruß,
Svenska
Titel: Re: Verrückte Idee
Beitrag von: Sannaj am 22. December 2011, 18:00
Eigentlich gehts mir dann schon ehr um die Videofunktionen.
Titel: Re: Verrückte Idee
Beitrag von: XanClic am 22. December 2011, 19:39
Ich halte davon, dass mir die Idee vor allem bekannt vorkam. Und siehe da (nur eine Auswahl):

Ich äußere mich jetzt nicht weiter zu dem Thema (außer, dass ich bei jedem solcher Threads immer dachte „viel zu viel Aufwand für viel zu wenig Nutzen“), weil eigentlich alles in diesen Threads gesagt wurde. Ansonsten einfach mal weiter auf osdev.org nach “BIOS code translation” oder so suchen.
Titel: Re: Verrückte Idee
Beitrag von: kevin am 22. December 2011, 19:45
Den int13 brauchst du nicht, wenn du einen eigenen Plattentreiber hast (und ein paar hässliche Einschränkungen hat der BIOS-Treiber auch)
In Zeiten, in denen man nicht nur von IDE-Platten und ATAPI-Laufwerken booten kann, sondern es Dinge wie AHCI oder gar USB-Sticks gibt, ist dieses "wenn" längst nicht immer gegeben.
Titel: Re: Verrückte Idee
Beitrag von: Sannaj am 22. December 2011, 20:06
Naja, man muss ja nicht gleich alle Opcodes umwandeln. Wenn man dem Prozessor sagen könnte, das er sich bei bestimmten Opcodes beschweren soll (Interrupt auslösen), wäre mir schon geholfen.
Titel: Re: Verrückte Idee
Beitrag von: XanClic am 22. December 2011, 23:43
Du müsstest aber praktisch alle Opcodes umwandeln, da zum Beispiel die meisten Word-Operationen im 32-Bit-PM einen Prefix bekommen, im RM nicht; bei den DWord-Operationen ist es dementsprechend genau umgekehrt. Und bei jeder Operation eine Exception auslösen... Das kannst du, nennst sich Trapflag, aber da kannst du gleich den ganzen Code emulieren.
Titel: Re: Verrückte Idee
Beitrag von: Dimension am 23. December 2011, 01:15
Es wäre definitiv interessant zu erfahren, ob deine Versuche Aussicht auf Erfolg zeigen. Ich habe bisher immer gelesen, dass das BIOS vom Protected Mode nur noch über VM86 zu erreichen ist. Bei genauerem Überlegen scheint es sich dabei aber vermutlich nur um eine Emulation zu handeln.
Titel: Re: Verrückte Idee
Beitrag von: XanClic am 23. December 2011, 03:26

Man bedenke vor allem, dass es im PM wirklich keinen sinnvollen Grund gibt, überhaupt BIOS-Code zu emulieren. vm86 ist vorhanden, funktioniert und ist wirklich prinzipiell sehr einfach zu implementieren, jedenfalls wesentlich einfacher, als es ein Emulator jemals sein könnte.

Befindet man sich jedoch im LM, so sind wie gesagt bereits fertige 8086-Emulatoren vorhanden, die den vm86 ersetzen können. Zu selbigen wird mWn auch jedem geraten, der eine entsprechende Frage auf osdev.org stellt (http://forum.osdev.org/viewtopic.php?f=1&t=23203#p187714 (http://forum.osdev.org/viewtopic.php?f=1&t=23203#p187714)).

Abschließend noch fünf Sekunden googlen: https://gitorious.org/x86emu (https://gitorious.org/x86emu).


Wie gesagt, als PoC ist Rekompilierung des BIOS sicherlich interessant. Einen ernsthaften Nutzen kann man daraus jedoch imho nicht ziehen.

PS: Ich mag PoCs. :wink:
Titel: Re: Verrückte Idee
Beitrag von: Sannaj am 23. December 2011, 15:38
Du meinst also ich soll im PM Mode den BIOS Code mithilfe des VM86-Modes ausführen und den VM86/Realmode im LM emulieren.
Titel: Re: Verrückte Idee
Beitrag von: XanClic am 23. December 2011, 17:02
Wenn du überhaupt in den LM gehst, ja (wobei du dann auch im PM den Code emulieren könntest, wenn du den Emulator einmal eingebunden/geschrieben hast).

Wenn nicht, dann meine ich das auch, wobei die letzten sieben Worte dann natürlich wegfallen. :wink: