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
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
#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
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 –
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? –
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