2012-09-25 1 views
6

Come compilare debug-info per moduli kernel linux caricabili (come quello del kernel in vmlinux- uname -r .debug?) Viene generato durante la creazione di un modulo, in caso affermativo dove sarà si trova?Debug-info per moduli kernel caricabili

risposta

5

Supponendo di aver creato il kernel con CONFIG_DEBUG_INFO, i simboli di debug dovrebbero già essere nel file .ko per il modulo in questione. Tuttavia, poiché il modulo può essere caricato dinamicamente a qualsiasi indirizzo, è necessario fornire a gdb un po 'più di informazioni.

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

è possibile utilizzare queste informazioni quando dice GDB sui moduli:

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

c'è un tutorial che ti guida attraverso questo sul sito di Linux Foundation. Kernel and Module Debugging with GDB

+0

Posso impostare punti di interruzione e punti di controllo? in quel tutorial hanno detto che non possiamo fare più avanzati come l'impostazione dei punti di interruzione ecc .. ?? e tutto questo può essere fatto nel singolo sistema giusto? oppure ho bisogno di PC? –

+0

Non sarà possibile impostare punti di interruzione sul kernel host mentre si è nell'host. Esegui il debug di un kernel in una VM o imposta il debug seriale su un'altra macchina in modo da poter fermare/avviare il kernel durante il debug. – 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

Come per questo collegamento non è necessario aggiungere i flag -g nel file make del mio modulo a destra ... ?? https://www.linux.com/learn/kernel-newbie-corner-kernel-and-module-debugging-gdb –