Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 可加载内核模块的调试信息_Linux Kernel - Fatal编程技术网

Linux kernel 可加载内核模块的调试信息

Linux kernel 可加载内核模块的调试信息,linux-kernel,Linux Kernel,如何为可加载的linux内核模块(如vmlinux中的内核-uname-r.debug?)生成调试信息。它是在构建模块时生成的吗?如果是,它将位于何处?假设您已使用CONFIG\u debug\u信息构建内核,则调试符号应该已经位于相关模块的.ko文件中。然而,由于模块可以在任何地址动态加载,您需要向gdb提供更多的信息 cd /sys/module/${MODNAME}/sections cat .text .data .bss 然后,您可以在向GDB介绍模块时使用此信息: (gdb) ad

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

假设您已使用CONFIG\u debug\u信息构建内核,则调试符号应该已经位于相关模块的.ko文件中。然而,由于模块可以在任何地址动态加载,您需要向gdb提供更多的信息

cd /sys/module/${MODNAME}/sections
cat .text .data .bss
然后,您可以在向GDB介绍模块时使用此信息:

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

<> P>有一个教程让你在Linux基金会网站上浏览这篇文章。p> 我可以设置断点和观察点吗?在那个教程中,他们提到我们不能做更高级的事情,比如设置断点等等。。??所有这些都可以在一个系统中完成,对吗?或者我需要安装PC?在主机上时,您将无法在主机内核上设置断点。在VM中调试内核或将串行调试设置到另一台机器,以便您可以在调试时停止/启动内核。根据此链接,我们不需要在我的模块的make文件right中添加-g标志。。。??
#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