GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Muss Kernel in derselben Entwicklungsumgebung wie Userspace kompiliert werden?

Nehmen wir an, mein Userspace (Pakete) wurde mit gcc 4.7 kompiliert und libc6 2.13 (Debian Wheezy)

Kann ich den Linux-Kernel unter einer anderen Entwicklungsumgebung kompilieren, wie z. B. gcc 6.3 und libc6 2.24 (zB unter Debian Stretch) ?

Ich weiß, dass der Kernel im Gegensatz zu Paketen nicht mit dynamischen Bibliotheken verknüpft ist. Theoretisch sollte es also keinen Unterschied machen, welcher gcc und libc es wurde kompiliert unter.

Stimmt das?
Könnte ich Probleme bekommen, wenn ich das mache?
Könnte es vielleicht zu Inkompatibilitäten kommen, die durch verschiedene gcc verursacht werden Versionen?

Andererseits neuere gcc hat einige interessante Features, bessere Sicherheit. Also sollte der Kernel vielleicht mit dem neusten gcc kompiliert werden ?

Akzeptierte Antwort:

Wie Sie betonen, hat die verwendete C-Bibliothek keine Auswirkungen auf den Kernel, der Kernel verwendet die C-Bibliothek nicht. (Es gibt eine indirekte Auswirkung, da es zum Erstellen von Tools verwendet wird, die der Kernel während seines Erstellungsprozesses verwendet, aber es ist äußerst unwahrscheinlich, dass dies das Endergebnis beeinflusst.)

Der Kernel kann mit einer Vielzahl unterschiedlicher Compiler-Versionen gebaut werden; Laut seiner Dokumentation benötigt es nur GCC 3.2 oder höher. Sie werden auch feststellen, dass es eine Weile dauern kann, bis der Kernel die neuesten Versionen von GCC offiziell unterstützt, und noch länger, bis ein Distributionskernel ihn verwendet. Zum Beispiel verwendet das Debian-Linux-Kernel-Paket GCC 6 und hat sogar spezielle Pakete, um die richtige Compiler-Version bereitzustellen (linux-compiler-gcc-6-x86 auf amd64 und i386 ). Es besteht keine Verbindung zwischen dem für den Kernel verwendeten Compiler und dem für den Userspace verwendeten Compiler (es besteht auch keine Notwendigkeit, denselben Compiler für den gesamten Userspace zu verwenden – alte Programme, die mit GCC 3 oder sogar 2 erstellt wurden, funktionieren immer noch auf modernen Systemen).

Neuere Compiler-Versionen bieten zwar mehr Sicherheitsfunktionen, aber GCC 6 ist gut genug für die meisten, wenn nicht alle im Kernel verwendeten Sicherheitsfunktionen.


Linux
  1. Braucht Linux gelegentlich eine Bereinigung?

  2. Was bedeutet es zu sagen, dass der Linux-Kernel präventiv ist?

  3. Rufen Sie eine Userspace-Funktion innerhalb eines Linux-Kernel-Moduls auf

  4. Wie unterscheidet sich der Linux-Kernel von Mikrokernel-Architekturen?

  5. Warum muss Linux sowohl `/dev/cdrom` als auch `/media/cdrom` haben?

Linux-Kernel-NULL-Zeiger-Dereferenzierung in Memset von kzalloc

Wie vergleicht sich die Befehlszeile von Mac mit Linux?

Warum listet Linux NVMe-Laufwerke als /dev/nvme0 anstelle von /dev/sda auf?

Was ist der Vorteil, wenn Sie Ihren eigenen Linux-Kernel kompilieren?

Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0

Muss ich den Server nach einem Linux-Kernel-Update neu starten?