3

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

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

因为insmodbusybox(1.16.1)不支持-m所以我坚持grep modulename /proc/modules+添加偏移量nm来找出地址。

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

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

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

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

4

1 回答 1

5

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

您还可以设置断点do_one_initcall()并查看地址mod->init以获取加载地址。

于 2010-04-09T18:07:14.000 回答