2010-02-25 4 views
6

Linux-Kernel ist für das Übersetzen mit gcc geschrieben und verwendet eine Menge kleiner und hässlicher GCC-Hacks. Welche Compiler können den Linux-Kernel außer gcc kompilieren?kompilieren linux kernel mit nicht-gcc

Die eine, die kann, ist der Intel Compiler. Welche minimale Version davon wird für das Kernel-Kompilieren benötigt?

Es gab auch einen Tiny C Compiler, aber es konnte nur eine reduzierte und speziell bearbeitete Version des Kernels kompilieren.

Gibt es andere Compiler, die Kernel bauen können?

+0

Duplizieren: http://stackoverflow.com/questions/689327/is-it-possible-to-compile-linux-kernel-with-something-other-than-gcc – dmckee

+0

Meine erste Frage wäre .."Warum ist gcc keine Option?" Ich sage nicht, dass du nicht versuchen solltest, das zu tun, was du tust, in der Tat ist es großartig zu sehen, dass Neugier geweckt wird. Aber du taucht ein in einen Pool von Haien, die mit Lasern bewaffnet sind, also wollen die meisten von uns wissen warum. –

+1

@Tim Post, ich möchte lernen, welche Probleme gibt es bei der Kompilierung von Linux-Kernel mit Nicht-GCC-Compiler. Ich arbeite mit einem experimentellen Compiler und muss die Unterstützung von Gnu-Erweiterungen verbessern, die zum Kompilieren des Linux-Kernels benötigt werden. Patches von Intel (linuxdna) sind sehr interessant für mich. – osgx

Antwort

2

Es gibt einen fortlaufenden Prozess der Übertragung von LLVMLinux-Patches in den Vanilla-Kernel (2013-2014).

Das LLVMLinux ist ein Projekt von The Linux Foundation: http://llvm.linuxfoundation.org/, damit der Vanilla-Kernel mit LLVM erstellt werden kann. Viele Patches werden von Behan Webster, dem Projektleiter von LLVMLinux, vorbereitet.

Es ist LWN Artikel über das Projekt ab Mai 2013 https://lwn.net/Articles/549203/ "LFCs: Das LLVMLinux Projekt"

Aktueller Stand der LLVMLinux Projekt wird auf Seite verfolgt http://llvm.linuxfoundation.org/index.php/Bugs#Linux_Kernel_Issues

Things (im Grunde gcc-isms) bereits ausgeschieden vom Kernel: * Expicit Registervariablen (nicht C99) * VLAIS (nicht C99-konformes undokumentiertes GCC-Feature "Arrays variabler Länge in Strukturen") wie struct S { int array[N];} oder sogar struct S { int array[N]; int array_usb_gadget[M]; } wobei N und M nicht-konstante Funktion Argument sind * Verschachtelte Funktionen (Ada-Funktion, die von GCC/Gnat-Entwicklern in C portiert wurde; nicht in C99 erlaubt) * Einige gcc/Gas-Magie wie spezielle Segmente oder Makro

Dinge zu tun: * Verbrauch von __builtin_constant_p builtin wie beängstigend Magie zu implementieren BUILD_BUG_ON(!__builtin_constant_p(offset));

Die gute Nachricht über LLVMLinux sind, dass nach seinen Patches Kernel wird nicht nur mit LLVM + Clang, sondern auch leichter von anderen Nicht-GCC-Compilern gebaut werden, weil das Projekt viel nicht C99-Code wie VLAIS, erstellt von USB-Gadget-Autor, Netfilter Hacker und Crypto-Subsystem Hacker; Auch verschachtelte Funktionen werden getötet.

0

Kurz gesagt, können Sie nicht, weil der Kernel-Code geschrieben wurde, um die Vorteile der GCC-Compiler-Semantik zu nutzen ... und zwischen dem Kernel und dem kompilierten Code ist die Beziehung sehr stark, dh muss mit gcc kompiliert werden ... Da gcc ELF-Objektdateien (Embedded Linking Format) verwendet, muss der Kernel mit dem Objektcodeformat erstellt werden. Es sei denn, Sie können es hacken, um mit einem anderen Compiler zu arbeiten - es kann gut kompilieren, aber möglicherweise nicht funktionieren, da der Compiler unter Windows PE-Code erzeugt, könnte es unerwartete Ergebnisse geben, was bedeutet, dass der Kernel überhaupt nicht booten kann!

+0

Das sind eine Menge von OS und Compiler neben Windows Pe. Es gibt elf Compiler in vielen Unixen, es gibt auch viele kommerzielle Compiler für Linux (besonders für Embedded-Plattformen). Viele Compiler arbeiten mit ELF, und einige von ihnen unterstützen einen Teil der gcc-Erweiterungen. – osgx

+0

Ich benannte 2 Compiler, die wirklich in der Lage waren, den Kernel irgendwann in der Vergangenheit zu kompilieren - Intel CC und Tiny CC. Ich möchte hier den aktuellen Stand der Linux-Kernel-Compiling-Unterstützung hören. z. Kann "Sun Pro Compiler" den Kernel bauen? – osgx

+0

Es gibt viele Compiler, die ELF-Objektcode erzeugen können; Das ist nur falsch. Aus diesem Grund ist GCC nicht erforderlich. –

3

Eine outdatet Informationen: benötigen Sie den Kernel, um Patch mit der Intel CC zu kompilieren Download Linux kernel patch for Intel® Compiler

Siehe auch Is it possible to compile Linux kernel with something other than gcc für weiterführende Links und Informationen

Auf der jüngsten Quellen: http://forums.fedoraforum.org/showthread.php?p=1328718

+0

Die 689327 Frage ist auch etwas veraltet (fast ein Jahr). Gibt es einige neue Informationen oder gar eine Liste von Nicht-GCC-Compilern für den Kernel? – osgx

+0

Und ich möchte einen anderen Compiler als gcc, icc, tinycc wissen, die zum Kernelaufbau fähig sind. – osgx

+0

llvm mit clang ist seit dieser Saison in der Lage einen Linux Kernel zu bauen – osgx