ロード可能なLinuxカーネルモジュール(vmlinux- uname -r
.debugのカーネルのデバッグ情報など)のデバッグ情報をビルドする方法モジュールのビルド中に生成されますか?モジュールが配置される場合は、どこに配置されますか?
質問する
11466 次
2 に答える
8
#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
于 2016-10-05T15:58:34.937 に答える
8
CONFIG_DEBUG_INFO を使用してカーネルをビルドしたと仮定すると、問題のモジュールの .ko ファイルにデバッグ シンボルが既に含まれているはずです。ただし、モジュールは任意のアドレスに動的にロードできるため、gdb にもう少し情報を与える必要があります。
cd /sys/module/${MODNAME}/sections
cat .text .data .bss
モジュールについて GDB に伝えるときに、この情報を使用できます。
(gdb) add-symbol-file ${MODPATH} ${TEXT} -s .data ${DATA} -s .bss ${BSS}
Linux Foundation の Web サイトには、これを説明するチュートリアルがあります。GDB を使用したカーネルとモジュールのデバッグ
于 2012-11-29T14:18:40.160 に答える