2009-03-16 21 views
8

Mi piacciono le sfide di programmazione, e la scrittura di un kernel sembra una sfida di programmazione.Sviluppo kernel e loro collaudo in macchine virtuali

Purtroppo, noccioli sono particolarmente difficili da testare perché sono fondamentalmente il nucleo dei sistemi operativi e quindi non possono essere facilmente eseguito su di un sistema operativo.

Tuttavia, so di applicazioni denominate macchine virtuali che possono emulare hardware del computer.

Qual è il/modo più semplice per sviluppare e kernel di test (C + montaggio) utilizzando macchine virtuali?

risposta

11

Mentre BOCHS sembra essere meglio a farvi sapere quando qualcosa va storto con il vostro animale domestico sistema operativo ... è molto slooooow! Uso VirtualPC per test di uso generale e BOCHS quando le cose diventano oscure.

Inoltre, sarà più che probabile l'avvio del sistema operativo ogni 2 minuti, quindi è utile disporre di una sorta di modalità automatica per creare un'immagine di avvio & attiva nel PC virtuale.

Ho creato un'immagine di avvio di GRUB con tutte le informazioni necessarie per avviare il kernel Kernel.Bin dalla radice. Utilizzo un file batch per copiare questo file nella directory del progetto virtuale, utilizzare FAT Image Generator per copiare il mio kernel sull'immagine. Quindi avvia 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: impostare la priorità del processo di VirtualPC a bassa - fidarsi di me su questo! Sarei felice di scambiare qualche codice!

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

+0

Non ho un lettore di floppy disk nel mio computer, ma suppongo di non averne bisogno per le immagini floppy. Le tue istruzioni sembrano accurate tranne che io uso Linux ... qualcosa di particolare per quel SO? – luiscubal

+0

Bene, qui mi manca - La mia esperienza su Linux è molto limitata. Da quello che ho capito: la creazione di un'immagine floppy e la copia dei file su di essa è molto più semplice rispetto a Windows, ma qualsiasi risposta da parte mia in quell'arena sarebbe probabilmente sbagliata. Tuttavia, guarda in VMWare per Linux. È roba buona! – NTDLS

+0

Linux: il compilatore è ovviamente gcc, non djgpp (che a sua volta è una porta di gcc). –

0

Probabilmente solo la creazione di una macchina (86, credo), e poi studiare 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, quindi sarà necessario inserire alcune informazioni sul settore di avvio che causino l'avvio del kernel in fase di sviluppo.

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

sceglierne uno a caso, bochs sembra support la modifica del supporto di avvio dall'esterno con strumenti standard come dd ecc

0

E 'semplice. Configura una macchina virtuale, scrivi il tuo kernel, copialo sulla macchina virtuale, avvia la macchina virtuale.

Avrai bisogno di essere più specifico se volete consigli più specifici.

1

Potreste essere interessati a guardare HelenOS. È un microkernel ex-novo che è stato portato su molte architetture (stivali stabili su bare metal) sviluppato utilizzando simulatori come Simics e QEMU.

Utilizziamo una grub statica che viene copiata sull'ISO finale durante il processo di compilazione.Alcune cose devono essere così finché il sistema operativo non diventa self hosting. Consiglio vivamente di NON implementare la propria libreria C in userspace a meno che non si voglia fare tutto da zero .. diventerà auto hosting molto prima :)

Anche se Simics non è gratuito, lo consiglio vivamente (e costruito in strumenti di debug/profiling) durante la creazione del kernel. Una volta che hai una sorta di console e logger del kernel, QEMU fa un ottimo lavoro.

0

La prima domanda che devi porci è quale architettura hardware stai prendendo di mira? Presumo per questa discussione che si sta prendendo di mira l'architettura IA_32, che sarebbe probabilmente una scelta saggia in quanto vi è abbondanza di documentazione prontamente disponibile su quel processore.

Se si è seriamente intenzionati a intraprendere questa operazione, è consigliabile eseguire il ciclo di debug/code/build/deploy su un emulatore o 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 proprio ambiente di sviluppo funzionasse sotto Linux o Windows, che ancora una volta sarebbe probabilmente una scelta saggia a causa della documentazione disponibile per quegli ambienti dev.

Make è tuo amico. Usalo per automatizzare il processo di generazione/esecuzione. Ti consiglio di scegliere i tuoi strumenti/compilatori in anticipo e di dedicare loro del tempo ad apprenderli bene. Vi salverà a lungo termine.