| Zeile 14: | Zeile 14: | ||
Zudem ist ein Treiber für die serielle Schnittstelle sowohl im [[Real Mode]] als auch im [[Protected Mode]] relativ einfach zu schreiben. [[Interrupt | Interrupts]] müssen hierfür nicht verarbeitet werden können. | Zudem ist ein Treiber für die serielle Schnittstelle sowohl im [[Real Mode]] als auch im [[Protected Mode]] relativ einfach zu schreiben. [[Interrupt | Interrupts]] müssen hierfür nicht verarbeitet werden können. | ||
| − | == bochs / QEMU == | + | == bochs / QEMU / VirtualBox == |
Falls man mit Fehlern wie Pagefaults, GPFs oder anderen Exceptions kämpft, ist es wichtig, die Registerinhalte vor der Exception zu kennen. Um an diese zu kommen, sind Debug-Funktionen in den Emulatoren ein wertvolles Werkzeug. | Falls man mit Fehlern wie Pagefaults, GPFs oder anderen Exceptions kämpft, ist es wichtig, die Registerinhalte vor der Exception zu kennen. Um an diese zu kommen, sind Debug-Funktionen in den Emulatoren ein wertvolles Werkzeug. | ||
| − | Bei | + | Bei [[Bochs Debugger|bochs]] und [[VirtualBox]] kann dazu der integrierte Debugger benutzt werden. Diese beiden Emulatoren bieten weiterhin ein Log in der Konsole (Bochs) bzw. über die Debug-Funktionen (VirtualBox), dass unter Umständen wichtige Informationen über fehlerhafte Harwareansteuerung liefert. |
QEMU stellt keinen eigenen Debugger zur Verfügung, ermöglicht aber eine Verbindung mit einem externen, wie z. B. dem GNU Debugger. Dies ist mit der Option „-s“ möglich, dazu sollte man „-S“ verwenden, da das emulierte OS sonst sofort startet. Verwendet wird TCP-Port 1234. Um den GDB anzuhängen, startet man GDB mit dem Kernel-Binary, also z. B. „''gdb bin/kernel.bin''“. Darauf gibt man auf der GDB-Kommandozeile „''target remote :1234''“ ein, um GDB mit QEMU zu verbinden. Ein „''cont''“ führt die Ausführung fort. Breakpoints können mit „''break datei:zeile''“ gesetzt werden, können aber auch auf Funktionen („''break _foo''“) gesetzt werden. | QEMU stellt keinen eigenen Debugger zur Verfügung, ermöglicht aber eine Verbindung mit einem externen, wie z. B. dem GNU Debugger. Dies ist mit der Option „-s“ möglich, dazu sollte man „-S“ verwenden, da das emulierte OS sonst sofort startet. Verwendet wird TCP-Port 1234. Um den GDB anzuhängen, startet man GDB mit dem Kernel-Binary, also z. B. „''gdb bin/kernel.bin''“. Darauf gibt man auf der GDB-Kommandozeile „''target remote :1234''“ ein, um GDB mit QEMU zu verbinden. Ein „''cont''“ führt die Ausführung fort. Breakpoints können mit „''break datei:zeile''“ gesetzt werden, können aber auch auf Funktionen („''break _foo''“) gesetzt werden. | ||