[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: vmlinux enorme



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 *



Reply to: