gcc 최적화 없이 Linux 커널 빌드

gcc 최적화 없이 Linux 커널 빌드

저는 Google 결과에서 찾은 많은 튜토리얼 중 하나를 따라 gcc 및 kgdb/gdb를 사용하여 Linux 커널을 빌드하고 디버깅했습니다. 결국 나는 그것이 모두 시간낭비였다는 것을 깨달았다. -O0이나 -Og 모두 gcc 최적화 없이 커널을 컴파일할 수 없기 때문입니다. 최적화를 제거하는 구성 옵션이 없습니다. 마지막으로 Linus는 몇 년 전에 이것이 디버깅에 좋지 않다고 말했습니다.

어떤 이유로 kgdb가 반드시 존재해야 한다고 합니다. 변수/매개변수를 제거할 수 있는 방법이 있는지 궁금합니다."최적화” 한 곳에서 다른 곳으로 점프하는 대신 디버거가 코드를 순차적으로 실행하도록 하시겠습니까?

답변1

Linux 커널 소스 트리에는 제거 -O2하거나 -O0.

모든 컴파일 플래그를 변경하는 방법은 다음과 같습니다(Stephen Kitt에 따르면 위험할 수 있음).

cd linux
find . -name Makefile -print0 | xargs -0 sed -i 's/-O2/-O0/g'
or
find . -name Makefile -print0 | xargs -0 sed -i 's/-O2/-Og/g'

아니면 그냥 루트 Makefile로 변경하세요(이것이 더 안전합니다):

cd linux
sed -i 's/-O2/-O0/g' Makefile
or 
xargs -0 sed -i 's/-O2/-Og/g' Makefile

man gcc-Og디버깅 목적에 유용하다고 합니다 .

관련 정보