1

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

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 以处理内核模块?

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

实用程序 -M vmcore -N(kernel.debug + 内核模块)

-- Shrikanth RK

4

1 回答 1

0

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

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

于 2014-08-05T12:11:15.013 回答