компиляция ядра Linux с не-gcc - PullRequest
       23

компиляция ядра Linux с не-gcc

6 голосов
/ 25 февраля 2010

Ядро Linux написано для компиляции с gcc и использует множество маленьких и некрасивых gcc-хаков. Какие компиляторы могут компилировать ядро ​​Linux, кроме gcc?

Тот, который может, это компилятор Intel. Какая минимальная версия нужна для компиляции ядра?

Был также компилятор Tiny C, но он мог компилировать только сокращенную и специально отредактированную версию ядра.

Существуют ли другие компиляторы, способные собирать ядро?

Ответы [ 3 ]

3 голосов
/ 25 февраля 2010

Устаревшая информация: вам нужно исправить ядро, чтобы компилировать его с помощью Intel CC Загрузить исправление ядра Linux для компилятора Intel®

См. Также Можно ли скомпилировать ядро ​​Linux с чем-то другим, кроме gcc , для дальнейших ссылок и информации

Один из самых последних источников: http://forums.fedoraforum.org/showthread.php?p=1328718

2 голосов
/ 16 марта 2014

В настоящее время продолжается процесс установки исправлений LLVMLinux в ядро ​​vanilla (2013-2014).

LLVMLinux - проект Linux Foundation: http://llvm.linuxfoundation.org/, позволяющий собирать ванильное ядро ​​с помощью LLVM. Многие патчи подготовлены Беханом Вебстером, руководителем проекта LLVMLinux.

В мае 2013 года появилась статья о проекте LWN. https://lwn.net/Articles/549203/ "LFCS: проект LLVMLinux"

Текущее состояние проекта LLVMLinux отслеживается на странице http://llvm.linuxfoundation.org/index.php/Bugs#Linux_Kernel_Issues

Вещи (в основном gcc-isms) уже удалены из ядра: * Переменные регистров Expicit (не C99) * VLAIS (несовместимая с C99 недокументированная функция GCC «Массивы переменной длины в структурах»), например struct S { int array[N];} или даже struct S { int array[N]; int array_usb_gadget[M]; }, где N и M - аргумент непостоянной функции * Вложенные функции (функция Ada, портированная на C разработчиками GCC / Gnat; не разрешена в C99) * Некоторая магия gcc / gas, например, специальные сегменты или макро

Что нужно сделать: * Использование __builtin_constant_p встроенного для реализации страшной магии, такой как BUILD_BUG_ON(!__builtin_constant_p(offset));

Хорошей новостью о LLVMLinux является то, что после его исправлений ядро ​​не только становится компилируемым с помощью LLVM + clang, но и легче компилируется другими компиляторами, не относящимися к GCC, поскольку проект убивает не код C99, такой как VLAIS, созданный usb-гаджетом автор хакерами netfilter и хакерами криптоподсистемы; убиты также вложенные функции.

0 голосов
/ 25 февраля 2010

Короче говоря, вы не можете этого сделать, потому что код ядра был написан так, чтобы использовать преимущества семантики компилятора gcc ... и между ядром и скомпилированным кодом связь очень сильная, т.е. должна быть скомпилирована с помощью gcc. .. Поскольку gcc использует объектные файлы 'ELF' (Embedded Linking Format), ядро ​​должно быть построено с использованием формата объектного кода. Если вы не можете взломать его для работы с другим компилятором - он может хорошо скомпилироваться, но может не сработать, поскольку компиляторы под Windows выдают код PE, могут быть неожиданные результаты, означающие, что ядро ​​может вообще не загружаться!

...