2010-02-25 10 views
6

Jądro Linuksa jest napisane do kompilacji za pomocą gcc i używa wielu małych i brzydkich gcc-hack. Które kompilatory mogą kompilować jądro Linux z wyjątkiem gcc?Kompilowanie jądra Linux-em z non-gcc

Jednym z nich jest kompilator Intel. Jaka minimalna wersja jest potrzebna do kompilacji jądra?

Był też kompilator Tiny C, ale udało mu się skompilować tylko zredukowaną i specjalnie zmodyfikowaną wersję jądra.

Czy istnieją inne kompilatory zdolne do budowania jądra?

+0

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

+0

Moje pierwsze pytanie to ..."Dlaczego gcc nie jest opcją?" Nie mówię, że nie powinieneś próbować robić tego, co robisz, w rzeczywistości jest to wspaniałe, aby zaspokoić ciekawość. Ale nurkujesz w pulę rekinów uzbrojonych w lasery, więc większość z nas może chcieć wiedzieć dlaczego. –

+1

@ Tim Post, chcę się dowiedzieć, jakie problemy występują przy kompilowaniu jądra Linux-a z kompilatorami innymi niż GCC. Pracuję z jednym eksperymentalnym kompilatorem i muszę poprawić jego obsługę rozszerzeń gnu, potrzebnych do kompilacji jądra Linux. Łatki z intel (linuxdna) są dla mnie bardzo interesujące. – osgx

Odpowiedz

2

Trwa proces dodawania poprawek LLVMLinux do jądra wanilii (2013-2014).

LLVMLinux to projekt Fundacji Linux: http://llvm.linuxfoundation.org/, który umożliwia zbudowanie jądra wanilii za pomocą LLVM. Wiele poprawek przygotowuje Behan Webster, który jest kierownikiem projektu LLVMLinux.

Jest LWN artykuł o projekcie od maja 2013 https://lwn.net/Articles/549203/ "LFCs: Projekt LLVMLinux"

Obecny status projektu LLVMLinux jest śledzone na stronie http://llvm.linuxfoundation.org/index.php/Bugs#Linux_Kernel_Issues

miejsca (zasadniczo GCC-izmy) już wyeliminowane z jądra: * Expicit Rejestruje zmiennych (nie-C99) * VLAIS (bez C99 zgodny nieudokumentowanym GCC „Variable tablice długości w elemencie”), jak struct S { int array[N];} nawet struct S { int array[N]; int array_usb_gadget[M]; } w którym N i M są dla funkcja stała argumentu * Funkcje zagnieżdżone (funkcja Ada przeniesiona do C przez programistów GCC/Gnat; niedozwolone w C99) * Niektóre magiczne gcc/gaz jak specjalnych segmentów lub makro

rzeczy do zrobienia: * Wykorzystanie __builtin_constant_p wbudowanego polecenia wdrożyć straszny magii jak BUILD_BUG_ON(!__builtin_constant_p(offset));

Dobrą wiadomością o LLVMLinux są takie, że po jego łatach jądro nie tylko staje się możliwe do zbudowania dzięki klockom LLVM +, ale także łatwiejsze do zbudowania przez inne kompilatory niebędące GCC, ponieważ projekt zabija znacznie więcej niż kod C99, taki jak VLAIS, stworzony przez autora gadżetu USB, przez hakerów netfiltra i przez podsystem kryptograficzny hakerzy; również funkcje zagnieżdżone są zabijane.

0

Krótko mówiąc, nie można, ponieważ kod jądra został napisany w celu skorzystania z semantyki kompilatora gcc ... oraz pomiędzy kernelem i skompilowanym kodem, relacja jest bardzo silna, tj. Musi być skompilowana z gcc ... Ponieważ gcc używa plików obiektów "ELF" (Embedded Linking Format), jądro musi być zbudowane przy użyciu formatu kodu obiektowego. Jeśli nie możesz go zhackować do pracy z innym kompilatorem - może się on skompilować, ale może nie działać, ponieważ kompilatory pod Windowsa generują kod PE, mogą pojawić się nieoczekiwane wyniki, co oznacza, że ​​jądro może w ogóle się nie uruchomić!

+0

są dużo os i kompilatory oprócz okien pe. Istnieją kompilatory elfa w wielu systemach uniksowych, istnieje również wiele komercyjnych kompilatorów dla systemu Linux (w szczególności dla platform wbudowanych). Wiele kompilatorów pracuje z ELF, a NIEKTÓRE z nich obsługuje część rozszerzeń gcc. – osgx

+0

Wymieniłem 2 kompilatory, które naprawdę mogły w pewnym momencie skompilować jądro - Intel CC i Tiny CC. Chcę usłyszeć tutaj aktualny stan kompilacji jądra Linux. E.g. Czy "kompilator Sun Pro" może zbudować jądro? – osgx

+0

Istnieje wiele kompilatorów, które mogą wytwarzać kod obiektu ELF; to jest po prostu niepoprawne. Nie dlatego GCC jest wymagany. –

3

outdatet informacje: trzeba załatać jądra w celu zestawienia użyciu Intel CC Download Linux kernel patch for Intel® Compiler

Zobacz również Is it possible to compile Linux kernel with something other than gcc dalszych linków i informacji

On z najnowszych źródeł: http://forums.fedoraforum.org/showthread.php?p=1328718

+0

Pytanie 689327 jest również nieco przestarzałe (prawie rok). Czy są jakieś nowe informacje, a nawet lista niekompatybilnych elementów gcc dla jądra? – osgx

+0

I chcę wiedzieć, każdy kompilator inny niż gcc, icc, tinycc, które są zdolne do budowy jądra. – osgx

+0

llvm z clang jest w stanie budować jądro Linuxa od tego sezonu – osgx