|
zurück zur Homepage
Bochs-Tutorial
Auf dieser Seite finden Sie ein kleines Tutorial zum PC-Emulator Bochs. Ich schrieb es, weil ich im Internet kein wirklich gutes Tutorial in deutscher Sprache dazu finden konnte, obwohl es mehrere gute englische Tutorials zu diesem Thema gibt. Sollten mir Fehler unterlaufen sein, so übernehme ich keinerlei Haftung für durch diese aufgekommene Schäden. Außerdem bin ich dankbar für jeden Hinweis, der mir die Möglichkeit gibt, dieses Tutorial von Fehlern zu befreien oder es zu verbessern. Auch nehme ich Kritik und Lob hierzu gerne entgegen. Man kann mit mir über whitedragon@chris-soft.de in Verbindung treten und möge nicht verärgert sein, falls ich nicht sofort antworte. Eine Antwort erhalten Sie auf jeden Fall!
Dieses Tutorial besitzt keinen Anspruch auf Vollständigkeit! Es spiegelt lediglich eine Art Grundwissen dar, das man braucht, um effektiv mit Bochs arbeiten zu können.
Zielgruppe dieses Tutorials sind alle, die gerade erst anfangen mit Bochs zu arbeiten. Vor allem Betriebssystem-Entwickler in ihren Anfängen werden es (hoffentlich) zu schätzen wissen, da ich es ein wenig darauf aufbaue.
Der Name Bochs spricht sich zunächst einmal wie das Wort Box aus, von dem es abgeleitet wurde. Denn er stellt genau dies dar: Einen Kasten, in dem ein eigener kleiner PC läuft. Wer Bochs noch nicht hat, den verweise ich auf die Homepage. Dort klickt man auf der linken Seite unter Get Bochs auf See All Releases und schon hat man die Liste der verschiedenen stabilen Versionen vor sich. Windows-Nutzer sollten sich die aktuelle Version holen, die auf ".win-bin.zip" endet (selbst verwende ich zur Zeit die Version 2.2.1, mit dieser habe ich auch dieses Tutorial entwickelt). Diese braucht man einfach in einem Verzeichnis eigener Wahl zu entpacken (ich nenne dieses im Folgenden schlicht Bochs-Verzeichnis) und schon kann es los gehen!
Wenn man Bochs das erste Mal über bochs.exe startet, so wird man sich wundern, sich auf der Kommandozeilen-Ebene wieder zu finden, doch das hat seine Richtigkeit. Bevor man seinen virtuellen PC startet, kann man sich zunächst durch Menüs kämpfen, um diesen virtuellen PC zu konfigurieren, denn Bochs kann nicht nur einen bestimmten PC emulieren, sondern fast jeden beliebigen, mit fest vorgegebenen Werten für die Hardware: Diskettenlaufwerke, Festplatten, Maus und Hauptspeicher sind nur wenige der möglichen Bestandteile, die über das Menü vorgegeben werden können. Sie werden hier jedoch natürlich auch einfachere Wege kennenlernen, mit denen sich bochs.exe mit einem simplen Mausklick starten lässt, inklusive vorgegebener Hardware und vorgegebenem Betriebssystem.
Apropos Betriebssystem: Was macht ein reeller PC ohne Betriebssystem? Nicht viel! Und genau das gleiche macht ein virtueller PC PC ohne Betriebssystem. Daher benötigen wir zunächst ein Betriebssystem, das auf dem virtuellen PC laufen wird. Sollten Sie ein Betriebssystem-Entwickler sein und das eigene testen wollen, können Sie das gerne tun. Sie müssen lediglich vorher ein Disk-Image Ihres Betriebssystems erstellen. Haben Sie Ihr Betriebssystem bisher auf Diskette gehabt, so lege ich Ihnen die Freeware RawWrite ans Herz. Hiermit können Sie auch von jeder Diskette ein komplettes Image erstellen.
Falls Sie gerade kein Betriebssystem-Image zur Hand haben, können Sie zweierlei tun, um dennoch erfolgreich mit diesem Tutorial zu arbeiten:
- In der ZIP-Datei von Bochs, die Sie sich gerade besorgt haben sollten findet sich ein Harddisk-Image von DLX Linux im gleichnamigen Unterverzeichnis. Dies ist eine kleine Linux-Version, die von Festplatte gebootet wird.
- Auf der Homepage von Bochs findet sich ein Link mit dem Titel Disk Images. Hier können Sie mehrere Images von Betriebssystemen finden, unter anderem NetBSD, OpenBSD, FreeDOS und verschiedene Linux-Versionen. Manche dieser Images wurde von einer Diskette erstellt, andere von einer Festplatte.
Nun aber zur Einrichtung unseres ersten virtuellen PCs.
Beim Start von bochs.exe versucht das Programm, eine Konfigurationsdatei zu lesen. Standardmäßig heißt diese bochsrc.txt, man kann sie jedoch auch über einen eigenen Parameter beim Aufruf mittels bochs -f configfile mitgeben. In dieser Konfigurationsdatei kann man Bochs alles mitgeben, was es für den virtuellen PC an Angaben benötigt, wobei die Datei im ASCII-Format gehalten und zeilenweise interpretiert wird; man kann sie also mit jedem Texteditor ändern. Die wichtigsten dieser Angaben will ich nun zusammenstellen, wobei ich direkt ein passendes Beispiel mit liefere:
- megs:32
Durch diese Zeile wird der Hauptspeicher in Megabyte angegeben, hier haben wir also einen PC mit 32 Megabyte. Dieser Wert sollte in jedem Fall unter dem Wert des reellen PCs liegen, auf dem Bochs selbst läuft.
- romimage: file=BIOS-bochs-latest, address=0xf0000
vgaromimage: VGABIOS-elpin-2.40 Diese beiden Zeilen sollte man so angeben, wie sie hier stehen. Sie legen fest, aus welcher Datei Bochs das BIOS-ROM und das VGA-ROM beziehen soll. Zusätzlich wird für das BIOS noch die Speicherstelle mitgegeben, an der es bei unserem PC liegt, wobei 0xf0000 wohl fast immer stimmen sollte!
- floppya: 1_44=a:, status=inserted oder floppya: image=os_image, status=inserted
Diese Zeile gibt an, dass wir ein Diskettenlaufwerk haben und dass dort auch eine Diskette drin steckt (status=inserted).Im ersten Fall nimmt Bochs die tatsächlich in unserem realen PC steckende Diskette aus Laufwerk A, im zweiten Fall holt es sich das Diskettenimage aus der Datei os_image. Hier sollte man aufpassen, denn die Dateigröße muss auch tatsächlich einer Diskettengröße entsprechen (z.B. 1440kb, 720kb, etc.), sonst wird sie von Bochs nicht akzeptiert.
- boot: a
Hier geben wir an, dass wir von Diskettenlaufwerk A booten wollen. Im Klartext heißt das, dass wir das Betriebssystem von eben dieser Diskette haben wollen, die wir in der vorangegangenen Zeile beschrieben haben.
- log: protokoll.log
Dieser Parameter bestimmt die Datei, in der alle wichtigen Informationen, die während des Laufs entstehen mit protokolliert werden. Besonders informativ sind die Gründe, warum der virtuelle PC stecken bleibt, falls dies geschehen sein sollte!
- mouse: enabled=0
Eine Maus braucht unser virtueller PC erstmal nicht.
- debugger_log: debug.log
Diese Angabe protokolliert alles innerhalb einer Debugging-Session (siehe unten) mit. Vorsicht: Hier kann sehr schnell sehr viel stehen! Wenn man beim Debuggen nichts mitprotokollieren möchte, so gibt man debugger_log: - an.
- panic: action=ask
error: action=report info: action=report debug: action=ignore Diese Zeilen geben an, was das Programm bei bestimmten Fehlern tun soll. Sie sollten selbsterklärend sein, denke ich.
Es gibt noch sehr viel mehr Parameter. Wenn man noch nach bestimmten sucht, sollte man sich die mitgelieferte Datei bochsrc-sample.txt anschauen, dort sind auch viele Erläuterungen zu den einzelnen Parametern enthalten (in englischer Sprache natürlich). Die meisten sind jedoch etwas spezieller und die oben von mir angegebenen Standardeinstellungen sollten erst einmal reichen.
Bemerkungszeilen beginnen in der Konfigurationsdatei mit dem Zeichen #.
Für schreibfaule Leute (sprich: alle Programmierer) sind obige Angaben schon mal in der Datei bochsrc.txt zusammengefasst.
Wenn wir diese Datei nun in unser Bochs-Verzeichnis kopieren und bochs.exe starten, liest Bochs diese automatisch ein. Wir erkennen dies an der Meldung reading configuration from bochsrc.txt. Außerdem gibt uns Bochs in dem angezeigten Hauptmenü nun nicht mehr den Punkt [2] vor, der dann vor dem Cursor angezeigt wird, wenn keine Konfigurationsdatei geladen wurde, sondern direkt den Punkt [5]. Das bedeutet im Klartext: Wir brauchen nur noch die Enter-Taste zu drücken und schon legt Bochs los, unseren virtuellen PC zu starten.
Den erfolgreichen Start unseres virtuellen PC erkennen wir daran, dass ein weiteres Fenster aufgeht (nicht wundern: es geht im Hintergrund des bisherigen Fensters auf, bei mir zumindest). Wenn man nun den Eindruck gewinnt, dass der virtuelle PC sehr viel langsamer startet als der reale PC, auf dem Bochs läuft, so stimmt das. Denn Bochs lässt die Maschinenbefehle nicht direkt ausführen, sondern emuliert sie wirklich! Dies mag überflüssig und aufwändig erscheinen, hat aber den entscheidenen Vorteil, dass Bochs nicht nur auf PCs laufen kann, sondern auch auf einer Menge anderer Rechner.
Nachdem Sie nun erfolgreich Ihren virtuellen PC haben laufen lassen, gehen wir eine Stufe weiter, nämlich zum Debuggen. In der Windows-Version von Bochs gibt es ein weiteres Programm mit dem Titel bochsdbg.exe. Dies ist quasi das gleiche Programm wie bochs.exe, bietet aber zusätzlich die Möglichkeit, den virtuellen PC Maschinenbefehl für Maschinenbefehl laufen zu lassen. Auch kann man beliebig Unterbrechungspunkte setzen, sich Registerinhalte anzeigen lassen und vieles mehr.
Wie das ganze funktioniert, erläutere ich am besten an einem Beispiel:
Angenommen, man hat einen Bootloader geschrieben und möchte diesen debuggen. Dann kann man den ganzen Teil überspringen, in dem die BIOS-Routinen durchlaufen und der Bootsektor geladen wird. Eigentlich interessiert erst der Teil, ab dem der Bootsektor gestartet wird.
Starten Sie also bochsdbg.exe und geben Sie den Befehl lb 0x7c00 ein. Das bedeutet: "Setze einen Breakpoint auf die lineare Adresse 0x7c00." Man kann Adressen auch virtuell mit Segment und Offset angeben. Dann würde der Befehl wie folgt lauten: vb 0x0000:0x7c00
Dann geben wir als nächstes c für continue ein und warten, bis der virtuelle PC an diese Stelle gekommen ist. Er zeigt uns dann die Stelle und den Befehl an, der als nächstes ausgeführt werden soll und stoppt den PC dort. Nun können wir ganz gemütlich mit dem Befehl s Schritt (step) für Schritt durch unseren Bootsektor debuggen.
Wollen wir nun an einer Stelle wissen, was für Werte gerade in den Registern enthalten sind, so können wir dies mit einem der beiden Befehle info registers oder dump_cpu herausfinden. Der erste Befehl zeigt nur die meist genutzten Register an, der zweite jedoch wirklich alle. Ich bevorzuge dennoch den ersten, weil die Darstellungsweise sehr viel übersichtlicher ist.
Eine Möglichkeit, einen Teil des Hauptspeichers anzuzeigen, bietet der Befehl x. Beispielsweise erhät man mit dem Befehl x/8b 0xabcd die ersten 8 Byte ab Adresse 0xabcd angezeigt. Das b hinter der 8 ist dabei die Einheit (in diesem Falle Byte). Es gibt eine Menge Möglichkeiten für die Angabe der Einheiten. Am besten gibt man innerhalb des Bochs-Debuggers einmal den Befehl help "x" ein, dann erhält man direkt eine sehr ansehnliche Liste angezeigt.
Ganz allgemein: Der Befehl help ist nicht zu verachten, allerdings sind die Ausführungen manchmal extrem kurz geraten, so dass man um eine Suche im Internet häufig nicht drum herum kommt.
Will man nun ganz genau jeden Schritt angezeigt und mitprotokolliert haben, den der virtuelle Prozessor macht, so lässt sich dies mit dem Befehl trace-on bewerkstelligen. Dieser sorgt dafür, dass wir bei einem continue jeden Befehl mit ausgegeben bekommen. Stoppen lässt sich ein solcher Lauf über die Tastenkombination CTRL-C, die auch sehr nützlich ist, wenn man sich in einer Endlosschleife befindet. Dann kann man diese stoppen und mit step schauen, wo genau der Grund für diese liegt.
Der Befehl trace-on ist auch Schuld dafür, dass die Protokolldatei zum Debuggen schnell sehr groß werden kann. Es gibt jedoch auch einen Befehl trace-off, mit dem man das Mitprotokollieren nach continue wieder ausschalten kann.
Im Prinzip bin ich nun am Ende des Tutorials. Sie haben nun das zugegebenermaßen grobe aber ausreichende Handwerkszeug, um mit Bochs eine virtuellen PC starten und debuggen zu können. Wie schon zu Beginn erwähnt gibt es sehr, sehr viel mehr Möglichkeiten, mit Bochs zu arbeiten. Da dies aber den Rahmen eines Anfängertutorials sprengen würde, möchte ich an dieser Stelle nur noch ein paar Tipps geben:
- Erzeugen Sie für jedes Betriebssystem ein eigenes Verzeichnis, aus dem heraus Sie Bochs mittels einer Batch-Datei starten. Dies vermeidet Probleme, wenn man mit mehreren Systemen jongliert.
- Wenn Sie Bochs immer wieder mit einer gleichen Konfiguration starten und das Hauptmenü vermeiden wollen, verwenden Sie den Parameter-q beim Start. Bochs beginnt dann direkt mit der Simulation Ihres virtuellen PCs.
- Sollten Sie ein spezielles Problem oder eine spezielle Frage haben, so ziehen Sie die Dokumentation zu Rate. Sie ist trotz ihres Umfanges sehr übersichtlich aufgebaut. Die aktuellste Dokumentation finden Sie hier auf der Homepage von Bochs oder aber die zu Ihrer aktuellen Version in dem Unterverzeichnis docs im Bochs-Verzeichnis.
- Falls Sie beim Emulieren Probleme mit der Darstellung im Textmodus Ihres virtuellen PCs erhalten, probieren Sie ein anderes VGA-ROM aus. Es werden mehrere verschiedene mit dem Programm mitgeliefert.
- Zum Debuggen ist eine Eigenschaft von Bochs extrem hilfreich: Wenn Sie einfach nur die Enter-Taste drücken, ohne einen Befehl eingegeben zu haben, wird der letzte Befehl wiederholt. Sie müssen also nicht immer wieder den step- oder continue-Befehl wiederholt einzugeben, sondern können den Finger getrost auf der Enter-Taste belassen.
Viel Erfolg beim Emulieren, Testen und Entwickeln!
(w) by Christian Packenius, 12.08.2005
zurück zur Homepage
|