2009-03-20 12 views
6

Me gustaría construir un kernel incrustado para una máquina x86 usando Visual C++. Tengo algunos archivos de código C y ensamblador para compilar y me gustaría vincularlos todos de una manera que sea compatible con un gestor de arranque Multiboot como GRUB.¿Cómo construyo una imagen del kernel usando Visual Studio?

+0

¿Estás seguro de que quieres ir por la ruta MSVC? Es un gran compilador pero creo que esto sería mucho más fácil con GCC/MingW –

+0

Creo que GCC/MinGW también generará ejecutables PE. Tendré que hacer los cambios necesarios para ELF a PE en cualquier entorno. VS es un placer usarlo, creo que lo preferiría. –

Respuesta

6

OSDev tiene una wiki entry on Visual Studio, que puede proporcionar una cierta penetración, especialmente con los enlaces a Kaushik Srenevasan de blogentries sobre el tema de granos de PE diseñado para ser cargado por gestores de arranque a base de arranque múltiple (como GRUB).

Un par de grandes-grandes rasgos cosas que debe saber:

  • En la cabecera de arranque múltiple, es necesario utilizar este truco AOUT.
  • Debe especificar el argumento/BASE: 0x100000 para el enlazador, de modo que el código binario final se base en dónde lo va a ubicar el gestor de arranque.
  • El punto de entrada de su kernel (normalmente llamado 'kmain') necesita tener __declspec(noreturn) en él, y deberá hacer un __asm { hlt } en lugar de devolverlo.
+0

Copiar y pegar no funciona aquí, pero señala el error: parece que "... kernels-using% 5F03.html", pero debería ser "... kernels-using_03.html". –

+0

No sé por qué, pero estoy copiando y pegándolo desde la barra de direcciones hasta aquí, y tiene un '_' literal cuando edito, así que parece estar reemplazándolo por el motivo que sea. –

+0

Ok, envié un correo electrónico al equipo SO, y me señalaron que hay otras formas de hacer un enlace, así que lo cambié a uno que funciona. –

Cuestiones relacionadas