如何从内核崩溃vmcores获取信息时将内核模块作为名称列表文件传递给libkvm

时间:2013-10-30 19:42:52

标签: freebsd

我有一个实用程序,它使用-M [/ dev / kmem或vmcore]和-N [namelist文件(kernel.debug)]选项从内核崩溃vmcores中提取信息,类似于“vmstat”之类的实用程序使用-M / -N选项

在vmcores上工作
usage: vmstat [-afHhimPsz] [-c count] [-M core [-N system]] [-w wait]
vmstat -m -M vmcore -N kernel.debug

但是在将一些内容从内核中移出到内核模块之后,现在在kernel.debug之外有符号。所以现在我不能只传递实用程序-M vmcore -N kernel.debug选项,因为这些符号现在位于内核模块中。除了kernel.debug文件之外,还可以调整libkvm来处理内核模块吗?

为了说明......我想

utility -M vmcore -N(kernel.debug + kernel module)

- Shrikanth R K

1 个答案:

答案 0 :(得分:0)

你能使用kgdb(1)吗?因为最新版本会自动加载模块符号。

否则,如果您想手动执行此操作,则需要遍历linker_files列表,从linker_files->tqh_first开始并按照link.tqe_next指针进行操作,直到找到包含文件名的条目为止你在找。该条目的地址成员是模块的加载地址。使用nm <module.ko> | grep ' t ',您可以在模块中找到名称和符号偏移。添加模块的加载地址和符号的偏移量,您就拥有符号的地址。