2012-09-25 2 views

답변

5

커널을 CONFIG_DEBUG_INFO로 빌드했다고 가정하면 디버그 기호는 해당 모듈의 .ko 파일에 있어야합니다. 그러나 모듈이 어떤 주소에 동적으로로드 될 수 있기 때문에 gdb에 좀 더 많은 정보를 제공해야합니다. 모듈에 대해 GDB를 이야기 할 때

cd /sys/module/${MODNAME}/sections 
cat .text .data .bss 

그런 다음이 정보를 사용할 수 있습니다 :

(gdb) add-symbol-file ${MODPATH} ${TEXT} -s .data ${DATA} -s .bss ${BSS} 

는 리눅스 재단의 웹 사이트에이 과정을 안내 튜토리얼이있다. Kernel and Module Debugging with GDB

+0

브레이크 포인트와 와치 포인트를 설정할 수 있습니까? 그 튜토리얼에서 우리는 중단 점 등을 설정하는 것과 같은 고급 기능을 수행 할 수 없다고 언급했습니다. ?? 이 모든 작업은 단일 시스템에서 올바르게 수행 할 수 있습니까? 그렇지 않으면 PC가 필요합니까? –

+0

호스트에있는 동안 호스트 커널에 중단 점을 설정할 수 없습니다. VM에서 커널을 디버그하거나 직렬 디버그를 다른 시스템에 설정하여 디버깅 할 때 커널을 중지/시작할 수 있습니다. – stsquad

4
#Modify your Makefile like this then build it 
#cat /sys/module/mydriver/sections/.text -> find the address 
#Then run like add-symbol-file drivers/mydrivers/mydriver.o address from above #line 
obj-m += module_name.o 
MY_CFLAGS += -g -DDEBUG 
ccflags-y += ${MY_CFLAGS} 
CC += ${MY_CFLAGS} 


all: 
     make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

debug: 
     make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 
     EXTRA_CFLAGS="$(MY_CFLAGS)" 
clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 
+0

이 링크마다 우리 모듈의 make 파일에 -g 플래그를 추가 할 필요가 없습니다 ... ?? https://www.linux.com/learn/kernel-newbie-corner-kernel-and-module-debugging-gdb –

관련 문제