Linux

使用英特爾編譯器編譯 Ubuntu “Raring”核心

  • August 31, 2013

當然,第一個問題是:我為什麼要這樣做。只是為了好玩!我正在學習有關 Linux 核心的更多資訊,並且我有一台可以在 15 分鐘內更換的虛擬機。

開始做生意,我不知道該怎麼做,所以我去嘗試編輯makefile(嘗試學習)。所以我從路徑中的makefile開始ubuntu-raring/Makefile,它是主要的make文件;可以在此連結下找到:

http://pastebin.com/ms2WpQi7

在那裡我把every gccto icc, and every g++to icpc, and every -O2to -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 中的每個gccg++足以使用不同的編譯器?還是我忽略了其他要更改的內容?

感謝您的任何努力。

First learn to walk, then learn to fly.

如果您想學習,請閱讀。您是否閱讀過使用英特爾 C 編譯器建構核心的說明手冊?這是一個反問的問題 b/c 本手冊使用不同的方法來icc選擇gcc.

你同時做三件事:

  • 擺弄一些採用和修補的核心以適應 Ubuntu 世界(即 gcc)
  • 優化從-O2-O3
  • 改變編譯器

kernel.org的 vanilla Linux 核心開始。保持一切標準並弄清楚如何建構適用於您的電腦的核心。建構一個只包含您的電腦需要的驅動程序的核心,僅此而已。一旦你可以編譯並引導到你自己的核心中,你就可以開始改變建構環境了。

-O2-O3可能永遠不會奏效。-O3就像打開潘多拉的盒子。如果啟用-O3是那麼容易,它可能是預設的!

引用自:https://unix.stackexchange.com/questions/88968