2010-04-07 6 views

Respuesta

40

Vamos a suponer que usted está hablando aquí ... x86

Depende de dónde se tiene en cuenta el límite entre "boot loader" y "núcleo" de ser: el inicio del kernel adecuada es de 32 código de modo protegido en bit, pero el kernel en sí proporciona algún código de arranque para llegar desde el modo real.

El código de modo real está en arch/x86/boot/: start_of_setup hace alguna configuración básica del medio ambiente para C, y llama main(), que hace algunas cosas bastante aburrida, que termina con el salto real a modo protegido (ver pmjump.S).

El lugar donde termina ahora depende de si el kernel está comprimido o no. Si lo es, el punto de entrada es en realidad una rutina de autodescompresión. Esto es bastante aburrido y esencialmente transparente: el código de descompresión y el kernel comprimido se mueven más arriba en la memoria, luego el kernel se descomprime en la ubicación original y luego se salta como si se hubiera descomprimido. a lo largo. Este código está en arch/x86/boot/compressed/ (el punto de entrada es startup_32 en head_32.S).

El núcleo realmente funciona correctamente en startup_32 en arch/x86/kernel/head_32.S. El código allí termina llamando al i386_start_kernel() en arch/x86/kernel/head32.c, que finalmente llama al código de inicio del núcleo genérico en start_kernel().

+1

Este es un K.O.! ¿Cómo te enteraste de ésto? ¿Hay algún libro que deba leer? – rook

+5

Experiencia, realmente: suficiente familiaridad con el diseño del árbol de fuentes del núcleo para saber dónde mirar; y suficiente experiencia con el tipo de cosas que implica el arranque del sistema operativo (ya que en el pasado implementó un código de arranque complejo de múltiples etapas para sistemas integrados), combinado con cierto conocimiento del arranque x86, para saber qué buscar. No sé si hay un buen libro que cubra esta área o no ... (¡Los detalles de las partes internas del kernel tienden a cambiar lo suficientemente rápido como para que los libros se vuelvan obsoletos con bastante rapidez!) –

+0

http://www.makelinux.net/ kernel_map/ –

Cuestiones relacionadas