gpt4 book ai didi

linux - 调试正在加载的内核模块

转载 作者:太空狗 更新时间:2023-10-29 12:12:39 24 4
gpt4 key购买 nike

我想知道是否可以调试正在加载的内核模块。

请注意,我目前正在 Linux 2.0.18 上尝试此操作。我关注了这个很棒的 tutorial .由于内核配置选项 CONFIG_PROC_KCORECONFIG_DEBUG_INFO 在这个内核版本中似乎不可用,我添加了 -g -gdwarf 到Makefile中的CFLAGS,重新编译内核和模块并重启。

然后我可以运行 gdb vmlinux/proc/kcore 然后运行 ​​p jiffies 得到 $1 = 1470917

这就是我开始迷路的地方,也是因为在该内核版本上似乎没有 /sys/module/gdb1/sections,因为它似乎需要调试加载的模块。

所以我只是尝试加载模块“ne”的符号:

(gdb) 符号文件模块/ne.o

用“y”确认后加载符号。然后我设置了一个断点:

(gdb) break ne.c:148
Breakpoint 1 at 0xa: file ne.c, line 148.

现在我想执行 modprobe ne 并到达断点,但我认为我完全走错了路。

有可能吗?即使它不在这么旧的内核上,我也很高兴知道如何调试在当前内核上加载的模块。

最佳答案

您正在链接的文档声明您在调试时不能使用断点。否则你可能会意外地死锁内核(例如,如果断点上的线程有一个自旋锁,调试器需要检查线程怎么办?),也没有稳定的状态,因为内核需要继续运行。

我只能推测为什么要描述这种方法。我的猜测是几年前没有太多选择,当时很少有人拥有支持虚拟化的硬件或多台机器来远程调试。

解决方法是使用类似 qemu 的东西并从主机连接到虚拟机。 http://wiki.osdev.org/Kernel_Debugging

此外,对于事后调试,您可以使用 https://people.redhat.com/anderson/crash_whitepaper/

关于linux - 调试正在加载的内核模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37059320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com