本文将介绍用icc(Intel? C++ Compiler)版本 10.1.x 来编译Linux的内核(支持2.6.22以上的版本)
2.6.23以上包含2.6.23的内核它的解压和引导内核代码改变了如果用icc去直接编译内核,将会造成部分代码无法用icc编译,或者编译出来的代码无法正常引导内核,所有本文的方法是用gcc编译引导部分的代码,而其它部分的代码交由icc编译.
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;>>>>>>>作者 Power_By_RTL 转载请注明作者<<<<<<<<<<<<<<&#61;&#61;&#61;&#61;
&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;>>>>>>> 本文 以 BSD协议 发佈 <<<<<<<<<<<&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
下载内核代码并解包.
修改 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 &#61; LD $&#64;
cmd_link_multi-y &#61; $(LD) $(ld_flags) -r -o $&#64; $(link_multi_deps) $(cmd_secanalysis)
2.6.23以前是
quiet_cmd_link_multi-y &#61; LD $&#64;
cmd_link_multi-y &#61; $(LD) $(ld_flags) -r -o $&#64; $(link_multi_deps) $(cmd_secanalysis)
在后面加个 /opt/intel/cc/10.1.021/lib/libirc_s.a 即
quiet_cmd_link_multi-y &#61; LD $&#64;
cmd_link_multi-y &#61; $(LD) $(ld_flags) -r -o $&#64; $(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 &#39;__intel_new_proc_init&#39; 之类的把 libirc_s.a 联接进去即可&#xff0c;如果你用10.1.018 版的在 /opt/intel/cc/10.1.018/lib/libirc_s.a