用非gcc编译linux内核

时间:2010-02-25 13:21:28

标签: linux compiler-construction linux-kernel clang llvm

Linux内核是为使用gcc进行编译而编写的,并使用了许多小而丑陋的gcc-hacks。 哪个编译器可以编译linux内核,除了gcc?

可以是英特尔编译器的那个。内核编译需要什么样的最小版本?

还有一个Tiny C编译器,但它只能编译内核的简化和特殊编辑版本。

是否有其他编译器能够构建内核?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

正在进行将LLVMLinux补丁提交到vanilla内核的过程(2013-2014)。

LLVMLinux是Linux基金会的项目:http://llvm.linuxfoundation.org/,可以使用LLVM构建vanilla内核。很多补丁都是由LLVMLinux项目负责人Behan Webster准备的。

2013年5月有关于该项目的LWN文章 https://lwn.net/Articles/549203/" LFCS:LLVMLinux项目"

在页面http://llvm.linuxfoundation.org/index.php/Bugs#Linux_Kernel_Issues

中跟踪LLVMLinux项目的当前状态

事物(基本上是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功能由GCC / Gnat开发人员移植到C中; C99中不允许) *某些gcc / gas魔法就像特殊的段,或宏

要做的事情: *使用__builtin_constant_p内置来实现像BUILD_BUG_ON(!__builtin_constant_p(offset));

这样可怕的魔法

关于LLVMLinux的好消息是,在其补丁内核不仅可以使用LLVM + clang构建,而且更容易由其他非GCC编译器构建,因为该项目杀死了很多不是像VLAIS这样的C99代码,由usb gadget创建作者,netfilter黑客和加密子系统黑客;嵌套函数也被杀死。

答案 2 :(得分:0)

简而言之,你不能,因为内核代码是为了利用gcc的编译语义而编写的......在内核和编译代码之间,关系是非常强大的,即必须用gcc编译。 ..由于gcc使用'ELF'(嵌入式链接格式)对象文件,因此必须使用目标代码格式构建内核。除非你可以破解它与另一个编译器一起使用 - 它可能很好地编译但可能不起作用,因为Windows下的编译器生成PE代码,可能会出现意外结果,这意味着内核可能根本无法启动!