我正在使用远程 (k)gdb 来调试模块中的问题,该问题在加载时会导致恐慌,例如在init()
调用时。
堆栈跟踪仅显示do_one_initcall(mod->init)
导致崩溃的原因。为了在 gdb 中加载符号文件,我需要获取模块文本部分的地址,并且要获取该地址,我需要加载模块。
因为insmod
busybox(1.16.1)不支持-m
所以我坚持grep modulename /proc/modules
+添加偏移量nm
来找出地址。
所以我在这里面临着鸡和蛋的问题——为了能够调试模块加载,我需要加载模块——但是为了加载模块,我需要调试问题。 ..
所以我目前正在考虑两种选择 - 有没有办法获取地址信息:
- 通过模块初始化代码中的 printk()
- 通过内核代码中某处的 printk()
所有这一切都在调用之前mod->init()
- 所以我可以在那里放置一个断点,加载符号文件,点击c并看到它崩溃并烧毁......