2010-04-07 8 views

Répondre

40

Je suppose que vous parlez x86 ici ...

Cela dépend où vous considérez comme la limite entre « chargeur de démarrage » et « noyau » d'être: le début du noyau proprement dite est 32 -bits en mode protégé, mais le noyau lui-même fournit du code de démarrage pour y accéder depuis le mode réel.

Le code en mode réel est en arch/x86/boot/: start_of_setup fait quelques réglages de base de l'environnement C, et appelle main(), qui fait des choses assez terne, se terminant par le saut réel en mode protégé (voir pmjump.S). Là où vous finissez maintenant dépend si le noyau est compressé ou non. Si c'est le cas, le point d'entrée est en fait une routine d'auto-décompression. C'est un truc plutôt terne, et essentiellement transparent: le code de décompression et le noyau compressé sont déplacés plus haut dans la mémoire, puis le noyau est décompressé à l'emplacement d'origine, puis il saute comme s'il n'avait pas été compressé. le long de. Ce code est dans arch/x86/boot/compressed/ (le point d'entrée est startup_32 dans head_32.S). Le noyau fonctionne vraiment correctement à startup_32 dans arch/x86/kernel/head_32.S. Le code y finit par appeler i386_start_kernel() dans arch/x86/kernel/head32.c, qui appelle finalement le code de démarrage du noyau générique dans start_kernel().

+1

Ceci est un K.O.! Comment l'avez-vous découvert? Y a-t-il un livre que je devrais lire? – rook

+5

Expérience, vraiment: assez de familiarité avec la disposition de l'arborescence des sources du noyau pour savoir où chercher; et assez d'expérience avec le type d'amorçage du système d'exploitation (ayant déjà implémenté un code d'amorçage complexe à plusieurs étapes pour les systèmes embarqués), combiné à une certaine connaissance de l'amorçage x86, pour savoir ce qu'il faut rechercher. Je ne sais pas s'il y a un bon livre qui couvre ce domaine ou pas ... (Les détails des noyaux internes ont tendance à changer assez rapidement pour que les livres soient désuets assez rapidement!) –

+0

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

Questions connexes