【问题标题】:Debug-info for loadable kernel modules可加载内核模块的调试信息
【发布时间】:2016-10-05 23:58:34
【问题描述】:

如何为可加载的 linux 内核模块构建调试信息(如 vmlinux-uname -r.debug 中的内核?)它是否在我们构建模块时生成,如果是,它将位于何处?

【问题讨论】:

    标签: linux-kernel


    【解决方案1】:

    假设您已经使用 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 网站上有一个教程可以引导您完成此操作。 Kernel and Module Debugging with GDB

    【讨论】:

    • 我可以设置断点和观察点吗?在那个教程中,他们提到我们不能做更高级的事情,比如设置断点等..??所有这些都可以在单个系统中完成,对吗?否则我需要电脑?
    • 您将无法在主机内核上设置断点。在 VM 中调试内核或将串行调试设置到另一台机器,这样您就可以在调试时停止/启动内核。
    【解决方案2】:
    #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 
    

    【讨论】:

    • 根据这个链接,我们不需要在我的模块的 make 文件中添加 -g 标志对 ...?? linux.com/learn/…
    猜你喜欢
    • 2016-08-31
    • 1970-01-01
    • 2013-03-10
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 2012-08-20
    • 2016-01-05
    相关资源
    最近更新 更多