使用英特爾編譯器編譯 Ubuntu “Raring”核心
當然,第一個問題是:我為什麼要這樣做。只是為了好玩!我正在學習有關 Linux 核心的更多資訊,並且我有一台可以在 15 分鐘內更換的虛擬機。
開始做生意,我不知道該怎麼做,所以我去嘗試編輯makefile(嘗試學習)。所以我從路徑中的makefile開始
ubuntu-raring/Makefile
,它是主要的make文件;可以在此連結下找到:在那裡我把every
gcc
toicc
, and everyg++
toicpc
, and every-O2
to-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++
足以使用不同的編譯器?還是我忽略了其他要更改的內容?感謝您的任何努力。
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
是那麼容易,它可能是預設的!