10

ロード可能なLinuxカーネルモジュール(vmlinux- uname -r.debugのカーネルのデバッグ情報など)のデバッグ情報をビルドする方法モジュールのビルド中に生成されますか?モジュールが配置される場合は、どこに配置されますか?

4

2 に答える 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 に答える