Después de que el gestor de arranque entrega la ejecución al kernel, ¿qué ocurre? Conozco al ensamblador, entonces, ¿cuáles son las primeras instrucciones que debe hacer un núcleo? ¿O hay una función C que hace esto? ¿Cuál es la secuencia de inicio antes de que el kernel pueda ejecutar un binario arbitrario?¿Cuáles son las primeras operaciones que ejecuta el Kernel de Linux al arrancar?
Respuesta
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()
.
Es asmlinkage void __init start_kernel(void)
función C en init/main.c
.
+1 Awesome response! Pero tengo una pregunta, ¿quién llama a start_kernel()? – rook
Creo que Matthew ya respondió eso. –
- 1. ¿Cuáles son las cosas buenas y malas en el diseño del kernel de Linux?
- 2. ¿Cuáles son las implicaciones de la macro linux __user?
- 3. ¿Cuáles son los códigos tales como CC, LD y CC [M] de salida al compilar el kernel de Linux?
- 4. ¿Cuáles son las alternativas al modelo Waterfall
- 5. ¿Cuáles son las diversas opciones/argumentos para "./configure" en Linux
- 6. ¿En qué contexto Kernel Thread se ejecuta en Linux?
- 7. ¿Cuáles son las convenciones de codificación para usar punto flotante en los controladores de dispositivos Linux?
- 8. técnicas de depuración actual Linux Kernel
- 9. ¿Cuáles son las mejores prácticas al usar SWIG con C#?
- 10. ¿Cuáles son las causas generales de la señal de aborto?
- 11. ¿Cuáles son las mejores prácticas para las bibliotecas de clases que usan inyección de dependencia para operaciones internas?
- 12. Operaciones atómicas en C en Linux
- 13. ¿Cuáles son las ventajas de Lazy Evaluation?
- 14. ¿Cuáles son las buenas prácticas con respecto a las bibliotecas compartidas en Linux?
- 15. Linux Kernel coding style
- 16. ¿Cuáles son las alternativas al uso de phpMyAdmin?
- 17. ¿Cuáles son las alternativas al subtipo de polimorfismo en scala?
- 18. ¿Qué operaciones son operaciones atómicas
- 19. ¿Cuáles son las mejores herramientas de informes para operaciones de tamaño mediano (abiertas y comerciales)
- 20. Linux Kernel Invalidating TLB Entries
- 21. Quiero contribuir con el kernel de Linux
- 22. ¿Compila/ejecuta el ensamblador en Linux?
- 23. ¿Cuáles son los usos de las diferentes operaciones de unión en sql
- 24. ¿Cuáles son las habilidades que necesita un desarrollador de Drupal?
- 25. ¿Cuáles son las rutas que "requieren" busca por defecto?
- 26. ¿Cuáles son las operaciones soportadas por puntero sin formato y puntero de función en C/C++?
- 27. ¿Cuáles son las desventajas al usar Garbage Collection?
- 28. ¿Cuáles son las diferencias al implementar en Tomcat vs. Websphere?
- 29. Organización de los encabezados kernel de Linux
- 30. ¿Cuáles son las limitaciones técnicas al usar Fusion Tables?
Este es un K.O.! ¿Cómo te enteraste de ésto? ¿Hay algún libro que deba leer? – rook
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!) –
http://www.makelinux.net/ kernel_map/ –