Intel 컴파일러를 사용하여 Ubuntu "Raring" 커널 컴파일

Intel 컴파일러를 사용하여 Ubuntu "Raring" 커널 컴파일

물론 첫 번째 질문은 내가 왜 이 일을 하고 있는가 하는 것입니다. 재미로! 저는 Linux 커널에 대해 더 많이 배우고 있으며 15분 안에 교체할 ​​수 있는 가상 머신이 있습니다.

집에 가까워서 어떻게 해야할지 몰라 가서 makefile을 편집해 보았습니다(배우려고). 따라서 ubuntu-raring/Makefile기본 make 파일인 path의 makefile부터 시작합니다 . 이 링크는 다음 링크에서 찾을 수 있습니다.

http://pastebin.com/ms2WpQi7

거기서 나는 gcc각각을 icc, 각각 g++icpc, 각각 -O2을 로 변경했습니다 -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문제가 해결되었지만 그렇지 않으면 질문이 발생합니다. 그리고 그들이 관련이 있는지는 모르겠습니다.

그래서 지금 나는 혼란스러워요! 내가 뭘 잘못했나요? gcc다른 컴파일러를 사용할 만큼 Makefile의 모든 합계를 변경하고 있습니까 ? g++아니면 제가 간과하고 있는 다른 것 중 변경해야 할 것이 있습니까?

모든 노력에 감사드립니다.

답변1

First learn to walk, then learn to fly.

배우고 싶다면 읽어보세요. 읽어 봤니...이 사용 설명서는 Intel C 컴파일러를 사용하여 커널을 빌드하는 데 사용됩니다.? 이 매뉴얼은 icc선택 에 대해 다른 접근 방식을 사용하기 때문에 이것은 반이론적인 질문입니다 gcc.

세 가지 일을 동시에 수행합니다.

  • 우분투 세계에 맞게 일부 채택 및 패치된 커널을 사용합니다(예: gcc).
  • -O2에서 까지 최적화하세요 -O3.
  • 컴파일러 변경

기본 Linux 커널로 시작하기kernel.org. 모든 것을 표준으로 유지하고 귀하의 컴퓨터에 적합한 커널을 구축하는 방법을 알아내십시오. 컴퓨터에 필요한 드라이버만 포함된 커널을 빌드하세요. 자신만의 커널로 컴파일하고 부팅할 수 있게 되면 빌드 환경 변경을 시작할 수 있습니다.

from -O2to는 -O3아마도 결코 작동하지 않을 것입니다. -O3마치 판도라의 상자를 여는 것과 같습니다. 활성화하기가 이렇게 쉬웠 다면 -O3기본값이 될 수도 있습니다!

관련 정보