Domanda

Mi piacciono le sfide di programmazione e scrivere un kernel sembra una sfida di programmazione.

Sfortunatamente, i kernel sono particolarmente difficili da testare perché sono fondamentalmente il nucleo dei sistemi operativi e quindi non possono essere facilmente eseguiti su un sistema operativo.

Tuttavia, conosco applicazioni chiamate macchine virtuali che possono emulare l'hardware del computer.

Qual è il modo più semplice / migliore per sviluppare e testare i kernel (C + Assembly) usando le macchine virtuali?

È stato utile?

Soluzione

Mentre BOCHS sembra essere migliore nel farti sapere quando qualcosa va terribilmente storto con il tuo sistema operativo per animali domestici ... è molto sloowow! Uso VirtualPC per test generici e BOCHS quando le cose diventano confuse.

Inoltre, molto probabilmente avvierai il sistema operativo ogni 2 minuti, quindi aiuta ad avere una sorta di modo automatizzato per creare un'immagine di avvio & amp; spegni il Virtual PC.

Ho creato un'immagine floppy di avvio di GRUB con tutte le cose necessarie per farlo avviare il kernel. Bin dalla radice. Uso un file batch per copiare questo file nella directory del progetto virtuale, utilizzo FAT Image Generator per copiare il mio kernel sull'immagine. Quindi basta avviare il progetto VirtualPC. Vola!

Estratto dal mio file batch:

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

Un ultimo suggerimento: imposta la priorità del processo VirtualPC su bassa - fidati di me su questo! Sarei felice di scambiare un po 'di codice!

Strumenti: DGJPP, NASM, GRUB.
Codice: osdev.org, osdever.net

Altri suggerimenti

Potresti essere interessato a guardare HelenOS . È un microkernel da zero che è stato portato su molte architetture (stivali proprio su bare metal) sviluppate usando simulatori come Simics e QEMU.

Utilizziamo un grub statico che viene copiato nell'ISO finale durante il processo di compilazione. Alcune cose devono essere così fino a quando il sistema operativo diventa self hosting. Consiglio vivamente di NON implementare la tua libreria C di spazio utente a meno che tu non voglia davvero fare tutto da zero .. diventerai self hosting molto prima :)

Anche se Simics non è gratuito, lo consiglio vivamente (e i suoi strumenti di debugging / profiling integrati) durante la creazione del kernel. Una volta che hai installato una specie di console del kernel e logger, QEMU fa un ottimo lavoro.

È semplice. Configurare una macchina virtuale, scrivere il kernel, copiarlo nella macchina virtuale, avviare la macchina virtuale.

Dovrai essere più specifico se desideri consigli più specifici.

Probabilmente sta solo configurando una macchina (x86, immagino), e quindi indaga esattamente come si comporta durante l'avvio. Dovrebbero esserci uno o più file nel file system della macchina host che fungono da file system della macchina virtuale e quindi dovresti inserire lì alcune informazioni sul settore di avvio che causano l'avvio del kernel in sviluppo.

Ciò significherebbe ovviamente che il sistema di compilazione sull'host ha un modo per scrivere il kernel nel file system della macchina virtuale, che potrebbe variare in difficoltà.

Scegline uno a caso, bochs sembra support modifica del supporto di avvio dall'esterno utilizzando strumenti standard come dd ecc.

La prima domanda che ti devi porre è quale architettura hardware stai prendendo di mira? Suppongo per il bene di questa discussione che stai prendendo di mira l'architettura IA_32, che sarebbe probabilmente una scelta saggia in quanto vi è molta documentazione prontamente disponibile su quel processore.

Se sei veramente serio su questa impresa, allora vorrai sicuramente eseguire il tuo ciclo di debug / code / build / deploy contro un emulatore o una VM. Qualcuno ha menzionato BOCHS, che è molto popolare. Se la velocità di emulazione è la tua passione, c'è anche un emulatore chiamato Qemu che è più veloce di BOCHS.

Suggerirei che il tuo ambiente di sviluppo funzioni sotto Linux o Windows, che sarebbe probabilmente una scelta saggia a causa della documentazione disponibile per quegli ambienti di sviluppo.

Make è tuo amico. Usalo per automatizzare il processo di compilazione / esecuzione. Ti consiglierei di scegliere i tuoi set di strumenti / compilatori in anticipo e di dedicare un po 'di tempo a impararli bene. Ti salverà a lungo termine.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top