GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Le noyau doit-il être compilé dans le même environnement de développement que l'espace utilisateur ?

Disons que mon espace utilisateur (paquets) est compilé avec gcc 4.7 et libc6 2.13 (Debian Wheezy)

Puis-je compiler le noyau Linux sous un environnement de développement différent, tel que gcc 6.3 et libc6 2.24 (c'est-à-dire sous Debian Stretch) ?

Je sais que contrairement aux packages, le noyau n'est lié à aucune bibliothèque dynamique. Donc théoriquement, cela ne devrait faire aucune différence quel gcc et libc il a été compilé sous.

Est-ce vrai ?
Pourrais-je rencontrer des problèmes lorsque je fais cela ?
Pourrait-il y avoir des incompatibilités causées par différents gcc version ?

D'autre part, le nouveau gcc a quelques fonctionnalités intéressantes, une meilleure sécurité. Alors peut-être que le noyau devrait être compilé avec le plus récent gcc ?

Réponse acceptée :

Comme vous l'avez souligné, la bibliothèque C utilisée n'a aucun impact sur le noyau, le noyau n'utilise pas la bibliothèque C. (Il y a un impact indirect, car il est utilisé pour construire des outils que le noyau utilise pendant son processus de construction, mais il est extrêmement peu probable que cela affecte le résultat final.)

Le noyau peut être compilé avec différentes versions de compilateur; selon sa documentation, il n'a besoin que de GCC 3.2 ou version ultérieure. Vous constaterez également que cela peut prendre un certain temps pour que le noyau prenne officiellement en charge les dernières versions de GCC, et plus longtemps encore pour qu'un noyau de distribution l'utilise. Par exemple, le paquet du noyau Debian Linux utilise GCC 6, et a même des paquets dédiés pour fournir la bonne version du compilateur (linux-compiler-gcc-6-x86 sur amd64 et i386 ). Il n'y a pas de lien entre le compilateur utilisé pour le noyau et le compilateur utilisé pour l'espace utilisateur (il n'est pas non plus nécessaire d'utiliser le même compilateur pour tout l'espace utilisateur - les anciens programmes construits avec GCC 3 ou même 2 fonctionnent toujours sur les systèmes modernes).

Les nouvelles versions du compilateur fournissent plus de fonctionnalités de sécurité, mais GCC 6 est assez bon pour la plupart sinon toutes les fonctionnalités de sécurité utilisées dans le noyau.


Linux
  1. Linux – Que signifie la lettre « u » dans /dev/urandom ?

  2. Linux - Comment le noyau Linux se compare-t-il aux architectures de micro-noyau ?

  3. Linux – Les différents noyaux Linux/unix sont-ils interchangeables ?

  4. Qu'est-ce que cela signifie de dire que le noyau Linux est préemptif ?

  5. Comment le noyau Linux détermine-t-il l'ordre des appels __init ?

Déréférencement du pointeur NULL du noyau Linux dans memset à partir de kzalloc

Comment la ligne de commande de Mac se compare-t-elle à Linux ?

Pourquoi Linux répertorie-t-il les lecteurs NVMe comme /dev/nvme0 au lieu de /dev/sda ?

Quel est l'avantage de compiler votre propre noyau Linux ?

Linux :Différence entre /dev/console , /dev/tty et /dev/tty0

Dois-je redémarrer le serveur après une mise à jour du noyau Linux ?