当然,第一个问题是:我为什么要这样做。只是为了好玩!我正在学习有关 Linux 内核的更多信息,并且我有一个可以在 15 分钟内更换的虚拟机。
言归正传,我不知道该怎么做,所以我去尝试编辑makefile(尝试学习)。所以我从路径中的makefile开始ubuntu-raring/Makefile
,这是主make文件;可以在这个链接下找到:
在那里我把每一个gcc
都改为icc
,每一个g++
到icpc
,每一个-O2
到-O3
。结果如下:
我也按照该网站的说明进行操作:
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
如此简单,它可能会成为默认设置!