martes, 5 de octubre de 2010

Bootloader sencillo

Introduccion:

Vamos a ver en este tutorial como crear un bootloader muy sencillo en ensamblador x86. El bootloader es de 16 bits (modo real). El bootloader por si solo no hace nada, solo permite que si hacemos un programa que muestre por ejemplo "Hola mundo" en la pantalla, el bootloader nos lo cargue en la memoria para ejecutarlo.

Definicion de bootloader:

Un bootloader es un programa sencillo que permite cargar en la memoria un programa de arranque para ejecutarlo. Un bootloader se guarda siempre en los primeros 512 bytes de memoria (sector de boot).

Requisitos:

NASM : compilador de ensamblador x86 para windows y linux.
Editor de textos
Linux (recomendado para este tutorial)

Pasos a seguir:

Abrimos el editor de texto.

Escribimos el siguiente codigo (mas adelante explicaré cada sentecia del codigo):

[ORG 0x7c00]         
[BITS 16]
times 510 - ( $ -$$ ) db 0
dw 0xAA55 

Explicación:


[ORG 0x7c00] esto indica la direccion de memoria donde se cargara la primera instruccion.
 [BITS 16] esto le indica al compilador que nuestro codigo es para una arquitectura de 16 bits.
times 510 - ( $-$$ ) db 0 esto hace que el bootloader ocupe los 512 bytes obligatorios.
dw 0xAA55 esto es el numero "magico" que permite arrancar.

Bien, una vez que hemos escrito el codigo en el editor de textos, vamos a proceder a guardarlo. Debemos guardarlo con extension .asm para mas tarde compilarlo.

Ej.: bootloader.asm

 Compilación:

Una vez que hemos guardado el codigo en un archivo vamos a compilarlo con NASM:
Para compilarlo debemos irnos a la consola de comandos y ejecutar esto:

nasm [ruta del archivo asm] -o [archivo con extension .bin]

Ej.: nasm bootloader.asm -o boot.bin

Nota: Esto ha sido ejecutado en linux, puede que en windows el comando sea ligeramente diferente.

Guardado en un disquete:

 Una vez que ya tenemos compilado el codigo en un archivo entendible por la CPU vamos a guardarlo en el sector de boot de un disquete (primeros 512 bytes). Para ello en linux pondremos en la consola de comandos lo siguiente:

 dd  if=[archivo con extension .bin]  bs=512  of=/dev/fd0

Ej.: dd if=boot.bin bs=512 of=/dev/fd0


Nota: En windows este comando no esta disponible, se necesitara el uso de programas adicionales.


Una vez hecho todo esto ya tendremos nuestro bootloader "instalado" en un disquete.

Un saludo.