Usando GRUB

From Movaxes

(Difference between revisions)
Line 29: Line 29:
Como se puede ver en la tabla solo las primeras 3 son requeridas.
Como se puede ver en la tabla solo las primeras 3 son requeridas.
 +
+ El campo 'magic' es el número mágico que identifica la cabecera, debe ser el valor hexadecimal: 0x1BADB002.
+ El campo 'magic' es el número mágico que identifica la cabecera, debe ser el valor hexadecimal: 0x1BADB002.

Revision as of 18:19, 7 February 2007

GRUB es un poderoso bootloader capaz de cargar un SO de 32-bit desde un floppy, un disco duro, a travez de la red, etc.

El desarrollo de un SO debe ser fácil como crear cualquier archivo ejecutable, GRUB se encarga de eso, nos permite crear un solo archivo ejecutable en cualquiera de los formatos reconocidos y se encarga de preparar el sistema para cargarlo en la memoria y ejecutarlo. Claro que no hace todo por nosotros, aún quedan algunas cosas pendientes, pero nos ahorra bastante trabajo (escribir un bootloader no es tarea fácil ni demasiado emocionante).

Para que nuestro SO sea capaz de cargar con GRUB debe tener el Multiboot Header (cabecera). Eso nos permite usar cualquier bootloader capaz de cargar un SO con un multiboot header.

MUltiboot Header

Esta cabecera debe estar contenida completamente en los primeros 8192 bytes de la imagen del SO. Por lo general mientras más pronto se encuentra mejor.

El layout de la cabecera es así:

Offset  Tipo  	Campo  	        Nota
0 	u32 	magic 	        requerido
4 	u32 	flags 	        requerido
8 	u32 	checksum 	requerido
12 	u32 	header_addr 	si la bandera[16] está puesta
16 	u32 	load_addr 	si la bandera[16] está puesta
20 	u32 	load_end_addr 	si la bandera[16] está puesta
24 	u32 	bss_end_addr 	si la bandera[16] está puesta
28 	u32 	entry_addr 	si la bandera[16] está puesta
32 	u32 	mode_type 	si la bandera[2] está puesta
36 	u32 	width 	        si la bandera[2] está puesta
40 	u32 	height 	        si la bandera[2] está puesta
44 	u32 	depth 	        si la bandera[2] está puesta

Como se puede ver en la tabla solo las primeras 3 son requeridas.

+ El campo 'magic' es el número mágico que identifica la cabecera, debe ser el valor hexadecimal: 0x1BADB002.

+ El campo 'flags' indica que es lo que necesita del bootloader para funcionar bien, los bits 0 al 15 indican los requerimientos, si el bootloader no entiende alguna de estas banderas o no puede cumplir con los requerimientos entonces no carga el SO y avisa al usuario. Los bits 16 al 31 indican otras opciones para el bootloader. Si el bit 0 está puesto todos los modulos cargados con el sistema operativo deben estar alineados a 4bytes. Si el bit 1 está puesto entonces la información disponible al menos por la via de los campos 'mem_' de la estructura de información del multiboot debe ser incluida (ver acá). Si el bootloader es capaz de pasar un mapa de memoria (campos 'mmap_') entonces debe pasarlo. Si el bit 2 está puesto la información acerca de la tabla de modo de video debe estar disponible para el kernel. SI el bit 16 está puesto los campos con offset 12 al 28 en el multiboot header son validos y el bootloader debe usarlos en lugar de los campos actuales en lugar del formato del ejecutable actual para calcular en dónde cargar el SO. Esto es necesario si el ejecutable no está en formato ELF sino en un a.out estandar o algún otro tipo de ejecutable.

+ El campo checksum es un valor de 32 bits sin signo que al sumarlo a los otros campos (magic+flags) debe tener una suma de 32bits sin signo de 0 (cero).

Personal tools