Ich möchte einen eingebetteten Kernel für eine x86-Maschine mit Visual C++ erstellen. Ich habe einige C- und Assembler-Code-Dateien zu kompilieren und möchte sie alle auf eine Weise miteinander verbinden, die mit einem Multiboot-Bootloader wie GRUB kompatibel ist.Wie erstelle ich ein Kernel-Image mit Visual Studio?
Antwort
OSDev hat ein wiki entry on Visual Studio, die einen Einblick liefern können, insbesondere mit den Verbindungen zu Kaushik Srenevasan des blogentries zum Thema PE Kerns gestaltet von Multi-Boot-basierten Bootloader geladen werden (wie GRäBT).
Ein paar große, breite Striche Dinge sollten Sie wissen:
- Im Multi-Boot-Header, müssen Sie die AOUT Flickschusterei verwenden.
- Sie müssen das Argument/BASE: 0x100000 für den Linker angeben, damit der endgültige Binärcode darauf basiert, wo der Bootloader ihn setzen wird.
- Der Einstiegspunkt Ihres Kernels (normalerweise '
kmain
' genannt) muss__declspec(noreturn)
darauf haben, und Sie müssen ein__asm { hlt }
tun, anstatt zurückzukehren.
Copy-and-paste funktioniert auch hier nicht, zeigt aber auf den Fehler: es sieht aus wie "... kernels-using% 5F03.html", sollte aber "... kernels-using_03.html" sein. –
Ich weiß nicht warum, aber ich kopiere es aus der Adressleiste in hier, und es hat ein wörtliches "_", wenn ich es bearbeite - SO scheint es zu ersetzen, aus welchem Grund auch immer. –
Ok, ich habe eine E-Mail an das SO-Team geschickt, und sie haben darauf hingewiesen, dass es andere Möglichkeiten gibt, einen Link zu erstellen, also habe ich ihn auf einen umgestellt, der funktioniert. –
Sind Sie wirklich sicher, dass Sie den MSVC-Pfad herunterfahren möchten? Es ist ein großartiger Compiler, aber ich denke, das wäre viel einfacher mit GCC/MingW –
Ich denke, GCC/MinGW wird auch PE ausführbare Dateien generieren. Ich werde die notwendigen Änderungen für ELF zu PE in jeder Umgebung vornehmen müssen. VS ist so ein Vergnügen zu benutzen, ich denke, ich würde es bevorzugen. –