2012-09-25 9 views

Antwort

5

Angenommen, Sie haben den Kernel mit CONFIG_DEBUG_INFO erstellt, die Debugsymbole sollten sich bereits in der .ko-Datei für das betreffende Modul befinden. Da das Modul jedoch dynamisch an jeder Adresse geladen werden kann, müssen Sie gdb ein bisschen mehr Informationen geben.

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

Sie können dann diese Informationen benutzen, wenn GDB über die Module zu sagen:

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

Es gibt ein Tutorial, das Sie durch diese auf der Linux Foundation Website geht. Kernel and Module Debugging with GDB

+0

Kann ich Haltepunkte und Watchpoints setzen? In diesem Tutorial haben sie erwähnt, dass wir nicht weiter fortgeschritten sind, wie das Setzen von Breakpoints etc .. ?? und all das kann in einem einzigen System gemacht werden, oder? oder brauche ich noch PCs? –

+0

Sie können keine Haltepunkte auf Ihrem Host-Kernel auf dem Host festlegen. Debuggen Sie entweder einen Kernel in einer VM oder richten Sie das serielle Debug auf eine andere Maschine ein, damit Sie den Kernel beim Debuggen stoppen/starten können. – 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

Laut diesem Link müssen wir nicht die Flags -g in der Make-Datei meines Moduls hinzufügen ... ?? https://www.linux.com/learn/kernel-newbie-corner-kernel-and-module-debugging-gdb –

Verwandte Themen