gpt4 book ai didi

linux - 如何调试 Linux 内核模块 `init()` 中的问题?

转载 作者:可可西里 更新时间:2023-11-01 11:50:54 25 4
gpt4 key购买 nike

我正在使用远程 (k)gdb 调试模块中的问题,该问题在加载时会导致 panic ,例如当 init() 被调用时。

堆栈跟踪仅显示 do_one_initcall(mod->init) 导致崩溃。为了在 gdb 中加载符号文件,我需要获取模块文本部分的地址,并且为了获取该地址,我需要加载模块。

因为 busybox (1.16.1) 中的 insmod 不支持 -m 所以我坚持使用 grep modulename/proc/modules + 添加与 nm 的偏移量以计算出地址。

所以我在这里面临着先有鸡还是先有蛋的问题 - 为了能够调试模块加载,我需要加载模块 - 但为了加载模块,我需要调试问题...

所以我目前正在考虑两种选择 - 有没有办法获取地址信息:

  1. 通过模块初始化代码中的 printk()
  2. 通过内核代码中某处的 printk()

所有这一切都是在调用 mod->init() 之前 - 所以我可以在那里放置一个断点,加载符号文件,点击 c 并看到它崩溃并且燃烧...

最佳答案

您能否将您的代码构建到内核中而不是作为一个模块?这可能会简化 init() 调用的调试。

也可以在do_one_initcall()设置断点,查看mod->init的地址,获取加载地址。

关于linux - 如何调试 Linux 内核模块 `init()` 中的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2606711/

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