87 votes

Comment le noyau Linux peut compiler lui-même ?

Je ne comprends pas très bien le processus de compilation du noyau Linux quand j'ai installer un système Linux sur ma machine.

Voici quelques choses qui me confond:

  1. Le noyau est écrit en C, cependant comment le noyau compilé sans un compilateur installé?
  2. Si le compilateur C est installé sur ma machine avant que le noyau est compilé, comment le compilateur lui-même compilé sans un compilateur installé?

J'ai été tellement confus pour un couple de jours, merci pour la réponse.

207voto

dmckee Points 50318

Le premier tour des binaires pour Linux box a été construit sur une autre machine sous Linux (probablement).

Les fichiers binaires pour le premier système Linux ont été construits sur certains autres plate-forme.

Les binaires pour que l'ordinateur peuvent retracer leurs racines retour à un système original qui a été construit sur encore une autre plate-forme.

...

Le pousser assez loin, et vous trouverez les compilateurs construit avec plus des outils primitifs, qui ont été construits sur des machines autres que leur hôte.

...

Continuer à pousser et vous trouver des ordinateurs construit de telle sorte que leurs instructions peut être saisi par le réglage des interrupteurs sur le panneau avant de la machine.

Des trucs très cools.

La règle est de "créer les outils pour construire les outils pour construire les outils...". Très bien comme les outils qui fonctionnent à notre environnement physique. Aussi connu comme "tirant vous-même par la force du poignet".

33voto

sastanin Points 16061

Je pense que vous devriez faire la distinction entre:

compiler, v: Pour utiliser un compilateur de traiter le code source et de produire du code exécutable [1].

et

installer, v: connecter, configurer ou de préparer quelque chose pour l'utiliser [2].

La Compilation produit des exécutables binaires à partir du code source. Installation simple en met exécutables binaires dans le bon endroit pour exécuter plus tard. Ainsi, l'installation et l'utilisation ne nécessite pas de compilation si les binaires sont disponibles. Pensez à "compiler" et "installer" comme sur les "cuire" et "servir", en conséquence.

Maintenant, à vos questions:

  1. Le noyau est écrit en C, cependant comment le noyau compilé sans un compilateur installé?

Le noyau ne peut pas être compilé sans un compilateur, mais il peut être installé à partir d'un binaire compilé.

Habituellement, lorsque vous installez un système d'exploitation, l'installation d'un noyau pré-compilé (binaire exécutable). Il a été compilé par quelqu'un d'autre. Et seulement si vous voulez compiler le noyau, vous avez besoin de la source et le compilateur, et tous les autres outils.

Même dans les "sources" des distributions comme gentoo, vous démarrez à partir de l'exécution d'un binaire compilé.

Ainsi, vous pouvez vivre votre vie entière, sans la compilation de noyaux, parce que vous les avez compilé par quelqu'un d'autre.

  1. Si le compilateur C est installé sur ma machine avant que le noyau est compilé, comment le compilateur lui-même compilé sans un compilateur installé?

Le compilateur ne peut pas être exécuté si il n'y a pas de noyau (OS). Donc on doit installer un compilé le noyau pour exécuter le compilateur, mais n'a pas besoin de compiler le noyau lui-même.

Encore une fois, la pratique la plus courante consiste à installer les binaires compilés du compilateur, et les utiliser pour compiler quoi que ce soit (y compris le compilateur lui-même et le noyau).

Maintenant, l'oeuf et la poule problème. La première binaires est compilé par quelqu'un d'autre... Voir une excellente réponse par dmckee.

14voto

a2800276 Points 1841

Le terme décrivant ce phénomène est d'amorçage, c'est un concept intéressant à lire. Si vous pensez à ce sujet le développement embarqué, il devient clair que beaucoup de périphériques, dire d'un réveil, micro-ondes, commandes à distance, qui nécessitent des logiciels ne sont pas assez puissants pour compiler leur propre logiciel. En fait, ces sortes d'appareils n'ont généralement pas assez de ressources pour exécuter quoi que ce soit à distance aussi compliqué que d'un compilateur.

Leur logiciel est développé sur une machine de bureau et de le copier une fois qu'il a été compilé.

Si ce genre de chose vous intéresse, un article qui vient à l'esprit sur le dessus de ma tête est: Réflexions sur la Confiance la Confiance (pdf), c'est un classique et un plaisir de lecture.

11voto

Adam Rosenfield Points 176408

Le noyau n'est pas compilé lui-même-il est compilé par un compilateur C dans l'espace utilisateur. Dans la plupart des architectures des processeurs, la CPU a un certain nombre de bits dans les registres spéciaux qui représentent ce que les privilèges le code actuellement en cours d'exécution. En x86, ce sont l' actuel niveau de privilège bits (CPL) dans le segment de code (CS) de vous inscrire. Si le CPL bits sont 00, le code est dit être en cours d'exécution dans la bague de sécurité 0, aussi connu comme mode noyau. Si le CPL bits sont 11, le code est dit être en cours d'exécution dans la bague de sécurité 3, aussi connu comme le mode utilisateur. Les deux autres combinaisons, 01 et 10 (sécurité des anneaux 1 et 2, respectivement) sont rarement utilisés.

Les règles concernant ce code peut et ne peut pas faire en mode utilisateur contre en mode noyau sont plutôt compliqué, mais il suffit de dire, en mode utilisateur a considérablement réduit les privilèges.

Maintenant, quand les gens parlent le noyau d'un système d'exploitation, ils sont en se référant aux parties de l'OS du code de s'exécuter en mode noyau avec des privilèges élevés. En général, le noyau, les auteurs essaient de garder le noyau le plus petit possible pour des raisons de sécurité, de sorte que le code qui n'a pas besoin des privilèges supplémentaires n'ont pas.

Le compilateur C est un exemple d'un tel programme -- il n'a pas besoin de l'appoint des privilèges offerts par mode noyau, de sorte qu'il s'exécute en mode utilisateur, comme la plupart des autres programmes.

Dans le cas de Linux, le noyau se compose de deux parties: le code source du noyau, et l'exécutable compilé le noyau. N'importe quelle machine avec un compilateur C permet de compiler le noyau à partir du code source dans l'image binaire. La question se pose alors est de savoir quoi faire avec cette image binaire.

Lorsque vous installez Linux sur un nouveau système, vous êtes en train d'installer un binaire précompilé image, généralement soit à partir d'un support physique (CD DVD) ou à partir du réseau. Le BIOS charge le (image binaire) du noyau du chargeur de démarrage à partir du support ou réseau, puis le bootloader va installer les binaires de l'image du noyau sur votre disque dur. Ensuite, lorsque vous redémarrez, le BIOS charge le noyau du chargeur de démarrage de votre disque dur, et le chargeur de démarrage charge le noyau en mémoire, et vous êtes opérationnel.

Si vous souhaitez recompiler votre noyau, qui est un peu plus compliqué, mais il peut être fait.

5voto

Ric Tokyo Points 5465

Qui était là en premier? de la poule ou de l'œuf?

Les œufs ont été autour depuis l'époque des dinosaures..

..certains confondent tout en disant les poulets sont en fait des descendants de la grande bêtes.. longue histoire courte: La technologie (Œuf) existait avant le produit Actuel (de Poulet)

Vous avez besoin d'un noyau de construire un noyau, c'est à dire vous en construire un avec l'autre.

Le premier noyau peut être tout ce que vous voulez *(de préférence quelque chose d'intelligent qui peut créer votre produit final souhaité ^__^)*

Ce tutoriel à partir de Son Noyau du Développement de l' enseigne afin de développer et de construire un petit noyau que vous pouvez ensuite tester avec une Machine Virtuelle de votre choix.

Signification: vous écrire et compiler un noyau de quelque part, et le lire sur un vide (sans OS) de la machine virtuelle.

Ce qui se passe avec ceux de Linux installe suit la même idée avec qui ajoute à la complexité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X