On Sun, Apr, 15, 2001 at 00:10:34 +0200, Santiago Vila wrote: > Tanto zImage como bzImage son distintos formatos de núcleo. Creo que > la diferencia está en la forma en la que se cargan en memoria (algunos > portátiles, por ejemplo, no pueden usar núcleos bzImage).
Sí. zImage lee el kernel comprimido a 0x10000 hasta max. 0x8EFFF y por eso está limitado a 508 kbyte. Para liberarse de esta limitación bzImage usa no solamente los primeros 640 kbyte de 0x00000 a 0x9FFFF sino también la área arriba de 1 Mbyte (0x100000). bzImage carga el kernel en bloques de 64 kbyte a 0x10000 hasta 0x1FFFF y los mueve a 0x100000 y las direcciones siguientes que normalmente no se pueden accesar en el real mode del x86. Después de cargar el kernel comprimido éste se encuentra en 0x10000 (zImage) resp. 0x100000 (bzImage). zImage copia ahora el kernel a 0x1000. Después de unos setups salta a 0x1000 resp. 0x100000. Esto pasa en setup.S. El kernel comprimido contiene en su principio la rutina para descomprimirse. En los dos casos se descomprime el kernel y escribe el kernel descomprimido a 0x100000 (1 Mbyte) a la memoria. En caso de bzImage no es posible directamente ya que en 0x100000 se encuentra el kernel comprimido. Por eso usa temporalmente la memoria de los primeros 640 kbyte y después del kernel comprimido. El código se encuentra en head.S y compressed/misc.c En los dos casos el kernel se encuentra finalmente en 0x100000 y ahí se ejecuta start_kernel que arranca el kernel. Todo antes sirve solamente para poner el kernel descomprimido a 0x100000 debido a la arquitectura vieja de las PCs. Todo esto está documentado en /usr/src/linux/arch/i386/boot/. -- * Debian = GNU/Linux XP *