用icc编译Linux内核完美教程[图文]
本文将介绍用icc(Intel? C++ Compiler)版本 10.1.x 来编译Linux的内核(支持2.6.22以上的版本)
2.6.23以上包含2.6.23的内核它的解压和引导内核代码改变了如果用icc去直接编译内核,将会造成部分代码无法用icc编译,或者编译出来的代码无法正常引导内核,所有本文的方法是用gcc编译引导部分的代码,而其它部分的代码交由icc编译.
=========>>>>>>>作者 Power_By_RTL 转载请注明作者<<<<<<<<<<<<<<====
=========>>>>>>> 本文 以 BSD协议 发佈 <<<<<<<<<<<================
下载内核代码并解包.
修改 include/linux/compiler-intel.h
加一行 #undef __compiler_offsetof
即 echo "#undef __compiler_offsetof" >> include/linux/compiler-intel.h
否则就出现
compilation aborted for kernel/pid.c (code 2)
make[1]: *** [kernel/pid.o] Error 2
make: *** [kernel] Error 2
修改代码目录的 Makefile
--start-group $(vmlinux-main) \
加入
--start-group $(vmlinux-main) /opt/intel/cc/10.1.021/lib/libirc_s.a --end-group \
修改 ./scripts/Makefile.build
quiet_cmd_link_multi-y = LD $@
cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis)
2.6.23以前是
quiet_cmd_link_multi-y = LD $@
cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis)
在后面加个 /opt/intel/cc/10.1.021/lib/libirc_s.a 即
quiet_cmd_link_multi-y = LD $@
cmd_link_multi-y = $(LD) $(ld_flags) -r -o $@ $(link_multi_deps) $(cmd_secanalysis) /opt/intel/cc/10.1.021/lib/libirc_s.a
/opt/intel/cc/10.1.021/lib/libirc_s.a 是icc的一个静态库在编译内核的过程中如果出现
undefined reference to '__intel_new_proc_init' 之类的把 libirc_s.a 联接进去即可,如果你用10.1.018 版的在 /opt/intel/cc/10.1.018/lib/libirc_s.a