Kernel entwickeln und in virtuellen Maschinen testen

8

Ich mag Programmieraufgaben, und das Schreiben eines Kerns scheint eine Programmieraufgabe zu sein.

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

Ich kenne jedoch Anwendungen, die als virtuelle Maschinen bezeichnet werden und Computerhardware emulieren können.

Was ist der einfachste Weg, um Kernel (C + Assembly) mit virtuellen Maschinen zu entwickeln und zu testen?

    
luiscubal 16.03.2009, 11:36
quelle

5 Antworten

11

Während BOCHS Ihnen besser sagen kann, wenn etwas mit Ihrem Haustier-Betriebssystem schief geht ... ist es sehr schäbig! Ich benutze VirtualPC für allgemeine Tests und BOCHS, wenn die Dinge trübe werden.

Außerdem werden Sie höchstwahrscheinlich alle 2 Minuten das Betriebssystem booten, daher ist es hilfreich, eine Art automatisiertes Verfahren zum Erstellen eines Boot-Images zu haben. feuern Sie den virtuellen PC ab.

Ich habe ein GRUB-Boot-Disketten-Image mit all den notwendigen Sachen erstellt, um es zu bekommen, den Kernel.Bin von der Wurzel aus zu booten. Ich verwende eine Batch-Datei, um diese Datei in das virtuelle Projektverzeichnis zu kopieren, benutze FAT Image Generator , um meine Datei zu kopieren Kernel zum Bild. Dann starten Sie einfach das VirtualPC-Projekt. Vola!

Auszug aus meiner Batch-Datei:

%Vor%

Ein letzter Vorschlag: Setzen Sie die Prozesspriorität des VirtualPC auf niedrig - vertrauen Sie mir hier! Ich würde gerne etwas Code austauschen!

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

    
NTDLS 16.03.2009, 17:06
quelle
1

Sie könnten daran interessiert sein, HelenOS zu sehen. Es ist ein Mikrokernel von Grund auf, der auf viele Architekturen portiert wurde (Stiefel, die auf blankem Metall gut funktionieren), die mit Simulatoren wie Simics und QEMU entwickelt wurden.

Wir verwenden eine statische Markierung, die während des Erstellungsprozesses in die endgültige ISO kopiert wird. Manche Dinge müssen einfach so sein, bis das Betriebssystem selbst hostet. Ich empfehle dringend, Ihre eigene Userspace C-Bibliothek NICHT zu implementieren, es sei denn, Sie wollen wirklich alles von Grund auf neu machen. Sie werden viel früher selbst hosten:)

Obwohl Simics nicht kostenlos ist, empfehle ich es sehr (und seine eingebauten Debugging / Profiling-Tools), während Sie Ihren Kernel machen. Sobald Sie eine Art von Kernel-Konsole und Logger installiert haben, macht QEMU eine sehr gute Arbeit.

    
Tim Post 16.03.2009 17:43
quelle
0

Es ist einfach. Richten Sie eine virtuelle Maschine ein, schreiben Sie Ihren Kernel, kopieren Sie ihn auf die virtuelle Maschine, booten Sie die virtuelle Maschine.

Sie müssen genauer sein, wenn Sie genauere Ratschläge benötigen.

    
jalf 16.03.2009 11:50
quelle
0

Wahrscheinlich richte ich gerade einen Rechner ein (x86, nehme ich an) und untersuche dann genau, wie er sich während des Bootens verhält. Im Dateisystem des Host-Rechners sollten sich eine oder mehrere Dateien befinden, die als Dateisystem der virtuellen Maschine fungieren. Anschließend müssen Sie einige Boot-Sektor-Informationen angeben, die Ihren In-Development-Kernel zum Booten veranlassen.

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

Nach dem Zufallsprinzip auswählen, Bochs scheint support Bearbeiten des Boot-Mediums von außen mit Standard Werkzeuge wie dd etc.

    
unwind 16.03.2009 11:50
quelle
0

Die erste Frage, die Sie sich stellen müssen, ist, auf welche Hardware-Architektur Sie abzielen? Ich nehme für diese Diskussion an, dass Sie auf die IA_32-Architektur abzielen, was wahrscheinlich eine kluge Wahl wäre, da es auf diesem Prozessor genügend verfügbare Dokumentation gibt.

Wenn Sie diese Aufgabe wirklich ernst nehmen, sollten Sie Ihren Debug / code / build / deploy-Zyklus unbedingt für einen Emulator oder eine VM ausführen. Jemand erwähnte BOCHS, was sehr beliebt ist. Wenn Emulationsgeschwindigkeit dein Ding ist, gibt es auch einen Emulator namens Qemu, der schneller als BOCHS ist.

Ich würde vorschlagen, dass Ihre Entwicklungsumgebung unter Linux oder Windows läuft, was wiederum aufgrund der verfügbaren Dokumentation für diese Entwicklungsumgebungen wahrscheinlich eine kluge Wahl wäre.

Make ist dein Freund. Verwenden Sie es, um den Build / Execute-Prozess zu automatisieren. Ich rate Ihnen, Ihre Toolsets / Compiler im Voraus auszuwählen und einige Zeit damit zu verbringen, sie gut zu lernen. Es wird dich auf lange Sicht retten.

    
Petey 16.03.2009 22:18
quelle

Tags und Links