2009-03-16 22 views
8

Me gustan los desafíos de programación, y escribir un kernel parece un desafío de programación.Desarrollando núcleos y probándolos en máquinas virtuales

Desafortunadamente, los núcleos son particularmente difíciles de probar porque son básicamente el núcleo de los sistemas operativos y por lo tanto no se pueden ejecutar fácilmente en la parte superior de un sistema operativo.

Sin embargo, sé acerca de las aplicaciones llamadas Máquinas virtuales que pueden emular el hardware de la computadora.

¿Cuál es la forma más fácil/mejor para desarrollar y probar kernels (C + Assembly) usando Máquinas Virtuales?

Respuesta

11

Mientras BOCHS parece ser mejor para hacerle saber cuando algo va horriblemente mal con su sistema operativo de mascota ... es muy raro! Uso VirtualPC para pruebas de propósito general y BOCHS cuando las cosas se ponen turbias.

Además, lo más probable es que inicie el sistema operativo cada 2 minutos, por lo que ayuda tener algún tipo de forma automatizada para crear una imagen de arranque & disparar desde la PC virtual.

Construí una imagen de disquete de arranque GRUB con todo lo necesario para arrancar Kernel.Bin desde la raíz. Utilizo un archivo por lotes para copiar este archivo en el directorio del proyecto virtual, use FAT Image Generator para copiar mi kernel a la imagen. Luego solo inicie el proyecto VirtualPC. Vola!

extracto de mi archivo por lotes:

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 

Una última sugerencia: Establecer la prioridad del proceso VirtualPC a la baja - confía en mí en este caso! ¡Estaría encantado de intercambiar algunos códigos!

Herramientas: DGJPP, NASM, GRUB.
Código: osdev.org, osdever.net

+0

No tengo un lector de disquete en mi computadora, pero supongo que no necesito uno para las imágenes de disquete. Sus instrucciones parecen precisas, excepto que uso Linux ... ¿algo en particular para ese sistema operativo? – luiscubal

+0

Bueno, aquí me quedo corto: mi experiencia con Linux es muy limitada. Por lo que entiendo: crear una imagen de disquete y copiar archivos a ella es mucho más simple que en Windows, pero cualquier respuesta mía en ese campo probablemente sería una dirección errónea. Sin embargo, busque en VMWare para Linux. ¡Es bueno! – NTDLS

+0

Linux: el compilador obviamente es gcc, no djgpp (que a su vez es un puerto de gcc). –

0

Probablemente solo estoy configurando una máquina (x86, supongo), y luego investigo exactamente cómo se comporta durante el arranque. Debe haber uno o más archivos en el sistema de archivos de la máquina anfitriona que actúen como el sistema de archivos de la máquina virtual, y luego deberá colocar allí alguna información del sector de arranque que provoque el arranque del kernel en desarrollo.

Eso, por supuesto, significa que el sistema de compilación en el host tiene una manera de escribir el kernel en el sistema de archivos de la máquina virtual, que puede variar en dificultad.

Recogiendo uno al azar, bochs parece support editar el medio de arranque desde el exterior utilizando herramientas estándar como dd etc.

0

Es sencillo. Configure una máquina virtual, escriba su núcleo, cópielo en la máquina virtual, inicie la máquina virtual.

Necesitará ser más específico si desea obtener más consejos específicos.

1

Usted puede estar interesado en el estudio de HelenOS. Es un micronúcleo desde cero que se ha trasladado a muchas arquitecturas (botas muy finas en metal desnudo) desarrolladas utilizando simuladores como Simics y QEMU.

Usamos un grub estático que se copia al ISO final durante el proceso de compilación.Algunas cosas solo tienen que ser de esa manera hasta que el sistema operativo se autoalimenta. Recomiendo encarecidamente NO implementar su propia biblioteca C de espacio de usuarios a menos que realmente desee hacer todo desde cero ... se autoalojará mucho antes :)

Aunque Simics no es gratuito, lo recomiendo (y es integradas en herramientas de depuración/creación de perfiles) mientras crea su kernel. Una vez que tienes algún tipo de consola de núcleo y registrador en su lugar, QEMU hace un muy buen trabajo.

0

La primera pregunta que debe hacerse es a qué arquitectura de hardware se dirige. Asumiré, por el bien de esta discusión, que está apuntando a la arquitectura IA_32, lo que probablemente sería una buena elección, ya que hay mucha documentación disponible en ese procesador.

Si realmente se toma en serio esta tarea, entonces definitivamente querrá ejecutar su ciclo de depuración/código/compilación/despliegue contra un emulador o VM. Alguien mencionó a BOCHS, que es muy popular. Si lo tuyo es la velocidad de emulación, también hay un emulador llamado Qemu que es más rápido que BOCHS.

Sugeriría que su entorno de desarrollo se ejecute bajo Linux o Windows, que de nuevo probablemente sea una buena elección debido a la documentación disponible para esos entornos de desarrollo.

Make es tu amigo. Úselo para automatizar el proceso de compilación/ejecución. Te aconsejo que selecciones los juegos de herramientas/compiladores por adelantado y dediques algún tiempo a aprenderlos bien. Te salvará a la larga.

Cuestiones relacionadas