компиляция ядра Linux с использованием не-gcc
-
22-09-2019 - |
Вопрос
Ядро 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-код, могут быть неожиданные результаты, то есть ядро может вообще не загрузиться!