2011-10-10 4 views
4

"make debug"를 명령 줄에서 실행할 수 있도록 노력 중이며 -DDEBUG_OUTPUT 정의를 사용하여 드라이버 모듈을 빌드하므로 특정 코드 섹션이 생성됩니다Linux 2.6 드라이버 모듈 makefile에서 디버그 타겟 만들기

2.4 커널 메이크 파일에서 이것은 매우 쉽습니다. 난 그냥 디버그를 만들 : 대상 및 "- DDEBUG_OUTPUT"해당 타겟에 대한 참조 컴파일 명령 인수에 포함되어 있습니다. 쉬운.

불행히도 (나를 위해), 2.6 완전히 모듈을 컴파일하는 방식이 바뀌었고 컴파일시 사용자 정의 정의를 표시하지 않는 사소한 "all"및 "clean"예제 만 찾을 수 있습니다.

나는이 시도 :

debug: 
    make -C $(KERNEL_DIR) SUBDIRS='pwd' -DDEBUG_OUTPUT modules 

및 메이크업에서 불만을 얻었다.

나는 또한 시도했다 :

.PHONY : 디버그하지만 EXTRA_CFLAGS에 포함 된 내용을보고하지 않는

debug: 
    make -C $(KERNEL_DIR) SUBDIRS='pwd' EXTRA_CFLAGS="$(EXTRA_CFLAGS) -DDEBUG_OUTPUT" modules 

. 명령 줄 출력에서 ​​-D를 include dir에 대해 -I를 포함하는 기존 EXTRA_CFLAGS에 올바르게 추가한다는 것을 알 수 있습니다. 그러나 드라이버 파일은 include dir을 찾을 수 없기 때문에 지금 컴파일되지 않습니다 ... 그래서 어떻게 든 EXTRA_CFLAGS에 포함 된 내용을 볼 수 없습니다.

답변

5

"-D"옵션은 make에 전달되지 않으므로 C 전처리 기 (cpp) 옵션입니다.

당신이 당신의는 kbuild 파일에 다음 줄을 추가해야 빌드에 대한 DEBUG_OUTPUT을 정의하려면,

는 이후
EXTRA_CFLAGS = -DDEBUG_OUTPUT 

당신이 호출 할 수 있습니다 평소와 같이 :

make -C $(KERNEL_DIR) M=`pwd` 

편집 : 당신이 돈이 ' Kbuild 파일을 편집하고 싶다면 다음과 같은 디버그 타겟을 가질 수 있습니다 :

INCLUDES="-Imy_include_dir1 -Imy_include_dir2" 

.PHONY: debug 
debug: 
     $(MAKE) -C $(KDIR) M=`pwd` EXTRA_CFLAGS="$(INCLUDES) -DDEBUG_OUTPUT" 

EDIT # 2 :

MY_CFLAGS=-DFOO -DBAR -Imydir1 

all: 
     $(MAKE) -C $(KDIR) M=`pwd` EXTRA_CFLAGS="$(MY_CFLAGS)" 

debug: MY_CFLAGS+=-DDEBUG_OUTPUT 
debug: 
     $(MAKE) -C $(KDIR) M=`pwd` EXTRA_CFLAGS="$(MY_CFLAGS)" 
+0

좋아, 할 수 있지만, "make"대신 "make debug"를 원할 경우 EXTRA_CFLAGS를 조건부로 해당 값으로 설정하는 방법은 무엇입니까? 디버그 대상 아래에 EXTRA_CFLAGS 할당을 직접 시도했지만 EXTRA_CFLAGS에 명령이 없습니다. – Rob

+0

디버그 타겟으로 답을 수정했습니다. – Mircea

+0

도움을 주신 Mircea에게 감사드립니다. 그 문자열을 거기에 넣겠지만 드라이버 파일은 EXTRA_CFLAGS의 -I로 지정된 include dir에있는 .h 파일이 누락되었다고 주장하기 때문에 컴파일되지 않습니다. 즉, EXTRA_CFLAGS = make 명령의 일부를 사용하면 make가 EXTRA_CFLAGS의 -I 부분을 볼 수 없게됩니다. 나는 그것을 원래 게시물에 추가했다. – Rob

관련 문제