使用 Intel 编译器编译 Ubuntu“Raring”内核

使用 Intel 编译器编译 Ubuntu“Raring”内核

当然,第一个问题是:我为什么要这样做。只是为了好玩!我正在学习有关 Linux 内核的更多信息,并且我有一个可以在 15 分钟内更换的虚拟机。

言归正传,我不知道该怎么做,所以我去尝试编辑makefile(尝试学习)。所以我从路径中的makefile开始ubuntu-raring/Makefile,这是主make文件;可以在这个链接下找到:

http://pastebin.com/ms2WpQi7

在那里我把每一个gcc都改为icc,每一个g++icpc,每一个-O2-O3。结果如下:

http://pastebin.com/cSwTYJ9C

我也按照该网站的说明进行操作:

https://help.ubuntu.com/community/Kernel/Compile

但最终,我遇到了奇怪的错误,这些错误似乎是由使用gcc/g++而不是icc/引起的icpc。例如,我在文件中遇到错误ubuntu-raring/include/linux/compiler-gcc.h,某些宏已经定义,而该文件不应该首先包含在其中!包含它的宏位于文件中ubuntu-raring/include/linux/compiler.h,如下所示:

#ifdef __GNUC__
#include <linux/compiler-gcc.h>
#endif

/* Intel compiler defines __GNUC__. So we will overwrite implementations
 * coming from above header files here
 */
#ifdef __INTEL_COMPILER
# include <linux/compiler-intel.h>
#endif

虽然我不明白 Intel 标头上方写的注释(听起来很奇怪...为什么要定义实现然后覆盖它们?从来没有在 C++ 中这样做过!),手动删除标头的包含gcc解决了问题,但其他问题出现了,我不知道它们是否相关。

所以现在我很困惑!我做错了什么?更改Makefile 中的每个gcc和是否足以使用不同的编译器?g++或者还有其他我忽略的事情需要改变吗?

感谢您所做的一切努力。

答案1

First learn to walk, then learn to fly.

如果你想学习,就阅读。你读了...吗本说明手册用于使用英特尔 C 编译器构建内核?这是一个反理论问题,因为本手册使用了不同的方法来icc选择gcc

你同时做三件事:

  • 摆弄一些采用和修补的内核以适应 Ubuntu 世界(即 gcc)
  • 优化从-O2-O3
  • 改变编译器

从普通 Linux 内核开始内核.org。保持一切标准并弄清楚如何构建适用于您的计算机的内核。构建一个仅包含计算机所需的驱动程序的内核,仅此而已。一旦您可以编译并引导到您自己的内核,您就可以开始更改构建环境。

-O2-O3可能永远不会起作用。-O3就像打开潘多拉魔盒。如果启用-O3如此简单,它可能会成为默认设置!

相关内容