Вопрос

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

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

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

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

Это было полезно?

Решение 2

Продолжается процесс фиксации исправлений LLVMLinux в vanilla kernel (2013-2014).

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

Есть вторая статья о проекте от мая 2013 года https://lwn.net/Articles/549203/ "LFC:Проект LLVMLinux"

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

Вещи (в основном gcc-измы), уже удаленные из ядра:* Expicit Регистрирует переменные (не C99) * VLAIS (недокументированная функция GCC, не совместимая с C99, "Массивы переменной длины в структурах"), например 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 gadget, хакерами netfilter и хакерами crypto subsystem;также уничтожаются вложенные функции.

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top