2010-02-25 3 views
6

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

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

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

Есть ли другие компиляторы, способные строить ядро?

+0

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

+0

Мой первый вопрос будет ..«Почему gcc не вариант?» Я не говорю, что вы не должны пытаться делать то, что делаете, на самом деле это здорово видеть, как любопытство потворствует. Но вы погружаетесь в пул акул, вооруженных лазерами, поэтому большинство из нас, возможно, захочет узнать, почему. –

+1

@Tim Post, я хочу узнать, какие проблемы возникают при компиляции ядра linux с не-gcc-компиляторами. Я работаю с одним экспериментальным компилятором, и я должен улучшить его поддержку расширений gnu, необходимых для компиляции ядра Linux. Патчи от intel (linuxdna) очень интересны для меня. – osgx

ответ

2

Продолжается процесс внесения патчей LLVMLinux в ядро ​​ванили (2013-2014 гг.).

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

Существует LWN статья о проекте с мая 2013 https://lwn.net/Articles/549203/ «СЛС: Проект LLVMLinux»

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

вещи (в основном GCC-измы) уже устранены из ядра: * Переменные переменных регистров (не 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) * Некоторые ССАГПЗ/газ магии, такие как специальные сегменты, или макро

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

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

0

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

+0

Есть много os и компиляторов, кроме windows pe. Есть эльфийские компиляторы во многих unixes, есть также много коммерческих компиляторов для linux (специально для встроенных платформ). Многие компиляторы работают с ELF, а некоторые из них поддерживают часть gcc-расширений. – osgx

+0

Я назвал 2 компилятора, который действительно смог скомпилировать ядро ​​в какой-то момент в прошлом - Intel CC и Tiny CC. Я хочу услышать здесь текущее состояние поддержки компиляции ядра Linux. . Может ли «компилятор Sun Pro» построить ядро? – osgx

+0

Существует много компиляторов, которые могут создавать объектный код ELF; это просто некорректно. Это не значит, что требуется GCC. –

3

outdatet информация: вам необходимо пропатчить ядро ​​для компиляции с помощью Intel CC Download Linux kernel patch for Intel® Compiler

Смотри также Is it possible to compile Linux kernel with something other than gcc для дальнейших ссылок и информации

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

+0

Вопрос 689327 немного устарел (почти год). Есть ли какая-то новая информация или даже список не-gcc-компиляторов для ядра? – osgx

+0

И я хочу знать любой компилятор, отличный от gcc, icc, tinycc, которые способны строить ядро. – osgx

+0

llvm с clang способен строить ядро ​​Linux с этого сезона – osgx

 Смежные вопросы

  • Нет связанных вопросов^_^