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 *

Responder a