用非gcc编译linux内核

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

其中一个就是英特尔编译器。 内核编译需要哪些最小版本?

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

有没有其他编译器能够build立内核?

一个outdatet信息:你需要修补内核,以便使用英特尔®CC 下载Linux内核修补程序英特尔®编译器进行编译

另请参阅是否有可能编译Linux内核与GCC以外的其他链接和信息

最近的消息来源: http : //forums.fedoraforum.org/showthread.php?p=1328718

目前正在进行将LLVMLinux补丁提交到vanilla内核的工作(2013-2014)。

LLVMLinux是The Linux Foundation的项目: http ://llvm.linuxfoundation.org/,以便使用LLVM构建vanilla内核。 很多补丁都是由LLVMLinux项目负责人Behan Webster编写的。

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

LLVMLinux项目的当前状态在http://llvm.linuxfoundation.org/index.php/Bugs#Linux_coreel_Issues

事情(基本上gcc-isms)已经从内核中消除:* Expicit Registers变量(非C99)* VLAIS(非C99兼容的未记录GCC特性“结构中的可变长度数组”)像struct S { int array[N];}甚至是struct S { int array[N]; int array_usb_gadget[M]; } struct S { int array[N]; int array_usb_gadget[M]; } struct S { int array[N]; int array_usb_gadget[M]; } N和M是非常量函数参数*嵌套函数(由GCC / Gnat开发人员移植到C中的Ada功能;在C99中不允许)*某些gcc / gas魔法,如特殊段或宏

要做的事情:*使用__builtin_constant_p内建来实现像BUILD_BUG_ON(!__builtin_constant_p(offset));这样的可怕魔法BUILD_BUG_ON(!__builtin_constant_p(offset));

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

简而言之,你不能,因为内核代码是为了利用gcc的编译器语义而编写的…而且在内核和编译代码之间,这种关系是一个非常强大的关系,即必须用gcc编译。 gcc使用“ELF”(嵌入式链接格式)对象文件,内核必须使用目标代码格式构建。 除非你可以用它来编译另一个编译器 – 它可能编译得很好,但可能无法工作,因为Windows下的编译器生成PE代码,可能会有意想不到的结果,这意味着内核可能根本无法启动!