Pregunta

Me gustan los desafíos de programación, y escribir un núcleo parece un desafío de programación.

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 sobre 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 de desarrollar y probar kernels (C + Assembly) usando máquinas virtuales?

¿Fue útil?

Solución

Si bien BOCHS parece ser mejor para avisarle cuando algo va terriblemente mal con su sistema operativo de mascotas ... ¡es muy lento! Uso VirtualPC para pruebas de propósito general y BOCHS cuando las cosas se ponen turbias.

Además, es muy probable que arranque el sistema operativo cada 2 minutos, por lo que es útil tener algún tipo de forma automatizada para construir una imagen de arranque & amp; dispara la PC virtual.

Construí una imagen de disquete de arranque GRUB con todo lo necesario para que arranque el Kernel.Bin desde la raíz. Utilizo un archivo por lotes para copiar este archivo en el directorio virtual del proyecto, uso FAT Image Generator para copiar mi kernel a la imagen. Luego, simplemente 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: establezca la prioridad del proceso VirtualPC en baja: ¡confíe en mí en esta! ¡Me encantaría intercambiar un código!

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

Otros consejos

Puede que le interese mirar HelenOS . Es un microkernel desde cero que se ha portado a muchas arquitecturas (arranca perfectamente en metal desnudo) desarrollado utilizando simuladores como Simics y QEMU.

Utilizamos un grub estático que se copia al ISO final durante el proceso de compilación. Algunas cosas simplemente tienen que ser así hasta que el sistema operativo se convierta en autohospedaje. Le recomiendo NO implementar su propia biblioteca C de espacio de usuario a menos que realmente quiera hacer todo desde cero ... se convertirá en autohospedaje mucho antes :)

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

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

Tendrá que ser más específico si desea consejos más específicos.

Probablemente solo configure una máquina (x86, supongo), y luego investigue exactamente cómo se comporta durante el arranque. Debería haber uno o más archivos en el sistema de archivos de la máquina host que actúen como el sistema de archivos de la máquina virtual, y luego deberá colocar alguna información del sector de arranque que haga que su núcleo en desarrollo arranque.

Eso, por supuesto, significaría que el sistema de compilación en el host tiene una forma de escribir el núcleo en el sistema de archivos de la máquina virtual, lo que puede variar en dificultad.

Escogiendo uno al azar, bochs parece support editar los medios de arranque desde el exterior usando herramientas estándar como dd, etc.

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 sobre ese procesador.

Si realmente toma en serio esta empresa, definitivamente querrá ejecutar su ciclo de depuración / código / compilación / implementación contra un emulador o VM. Alguien mencionó 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 en Linux o Windows, lo que nuevamente sería 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. Le aconsejo que elija sus conjuntos de herramientas / compiladores por adelantado y que pase un tiempo aprendiéndolos bien. Te salvará a la larga.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top