Frage

Ich mag Programmierherausforderungen, und das Schreiben eines Kernels scheint eine Programmierherausforderung zu sein.

Leider sind Kernel besonders schwer zu testen, da sie im Wesentlichen den Kern von Betriebssystemen bilden und daher nicht einfach auf einem Betriebssystem ausgeführt werden können.

Ich kenne jedoch Anwendungen namens „Virtuelle Maschinen“, die Computerhardware emulieren können.

Was ist der einfachste/beste Weg, Kernel (C+Assembly) mithilfe virtueller Maschinen zu entwickeln und zu testen?

War es hilfreich?

Lösung

BOCHS scheint zwar besser darin zu sein, Sie darüber zu informieren, wenn mit dem Betriebssystem Ihres Haustiers etwas schrecklich schief geht ...es ist sehr langsam!Ich verwende VirtualPC für allgemeine Tests und BOCHS, wenn die Dinge unklar werden.

Außerdem werden Sie das Betriebssystem höchstwahrscheinlich alle zwei Minuten starten. Daher ist es hilfreich, über eine automatisierte Möglichkeit zu verfügen, ein Boot-Image zu erstellen und den virtuellen PC zu starten.

Ich habe ein GRUB-Boot-Disketten-Image mit allen notwendigen Dingen erstellt, damit es die Kernel.Bin vom Stammverzeichnis booten kann.Ich verwende eine Batchdatei, um diese Datei in das virtuelle Projektverzeichnis zu kopieren FAT-Bildgenerator um meinen Kernel in das Image zu kopieren.Dann starten Sie einfach das VirtualPC-Projekt.Vola!

Auszug aus meiner Batch-Datei:

COPY Images\Base.vfd Images\Boot.vfd /Y
fat_imgen.exe modify Images\Boot.vfd -f Source\Bin\KERNEL.BIN
COPY Images\Boot.vfd Emulators\VirtualPC\ /Y
START Emulators\VirtualPC\MyOS.vmc

Ein letzter Vorschlag:Stellen Sie die VirtualPC-Prozesspriorität auf niedrig ein – vertrauen Sie mir!Gerne tausche ich Code aus!

Werkzeuge: DGJPP, NASM, GRUB.
Code: osdev.org, osdever.net

Andere Tipps

Vielleicht haben Sie Interesse an der Suche auf helenos . Es ist ein von Grund auf Mikro-Kernel, die für viele Architekturen (Stiefel gerade fein auf blankem Metall) portiert wurde entwickelt Simulatoren wie Simics und QEMU verwendet wird.

Wir verwenden eine statische grub, die auf die endgültige ISO während des Build-Prozesses kopiert wird. Manche Dinge müssen einfach so sein, bis das Betriebssystem selbst Hosting wird. Ich empfehle nicht Ihre eigene User-Space-C-Bibliothek Implementierung, wenn Sie wirklich von Grund auf, alles tun wollen .. Sie selbst werden viel früher Hosting:)

Obwohl Simics nicht frei ist, ich kann es nur empfehlen (und seine integrierten Debugging / Profilierwerkzeuge), während die Kernel zu machen. Wenn Sie irgendeine Art von Kernel-Konsole und Logger an der richtigen Stelle, QEMU hat eine sehr gute Arbeit geleistet.

Es ist einfach. Stellen Sie eine virtuelle Maschine, schreiben Sie Ihren Kernel, kopieren Sie sie in der virtuellen Maschine booten Sie die virtuelle Maschine.

Sie müssen genauer sein, wenn Sie mehr spezifische Beratung möchten.

Wahrscheinlich Einrichtung nur eine Maschine (x86, glaube ich), und dann untersuchen, wie genau es beim Booten verhält. Es sollte in der Host-Maschine des Dateisystem eine oder mehr Dateien, die als die virtuellen Maschine Dateisystem handeln, und dann würden Sie brauchen eine Boot-Sektor-Informationen dort zu setzen, die Ihre Ursachen in-Entwicklungs-Kernel zu booten.

Das würde natürlich bedeuten, dass das Build-System auf dem Host eine Möglichkeit hat, den Kernel zu der virtuellen Maschine Dateisystem zu schreiben, die in Schwierigkeiten variieren.

ein zufällig Pflücken, bochs scheint Unterstützung Bearbeiten des Bootmediums von außen unter Verwendung von Standard-Tool wie dd etc.

Die erste Frage, die Sie sich stellen müssen, ist das, was Hardware-Architektur zielen Sie ab? Ich werde für die Zwecke dieser Diskussion annehmen, dass Sie die IA_32 Architektur zielen, die wahrscheinlich eine kluge Wahl sein würde, da es viele leicht verfügbare Dokumentation auf diesem Prozessor ist.

Wenn Sie wirklich ernsthaft über dieses Unternehmen sind, dann möchten Sie auf jeden Fall Ihren Debug / code / build / deploy Zyklus gegen einen Emulator oder VM laufen. Jemand erwähnte BOCHS, die sehr beliebt ist. Wenn Emulation Geschwindigkeit ist Ihre Sache, es gibt auch einen Emulator namens Qemu, die schneller als BOCHS ist.

Ich würde vorschlagen, dass Ihre Entwicklungsumgebung unter Linux oder Windows laufen, die wiederum wahrscheinlich eine kluge Wahl aufgrund der verfügbaren Dokumentation für die Entwicklungsumgebungen sein würden.

Jetzt ist dein Freund. Verwenden Sie es, den Build / execute Prozess zu automatisieren. Ich würde empfehlen Ihnen, Ihre Toolset / Compiler vorne zu holen, und verbringen einige Zeit, sie gut zu lernen. Es wird Sie auf lange Sicht speichern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top