如何从内核代码打印当前寄存器值?

时间:2014-01-27 07:39:34

标签: linux linux-kernel kernel

我正在尝试从我的内核模块打印多个点的当前寄存器值。 这是我正在使用的代码:

struct pt_regs *regs = task_pt_regs(current);
show_regs(regs);

这样可行,但看起来上下文不正确。 例如,epc总是显示低于值,但我在我的文件中的多个位置都有此代码。

kernel: epc   : ffffffff8023a510 kernel_thread_helper+0x0/0x18

即函数名称始终为“kernel_thread_helper”。

如果出现内核恐慌,我会将epc值指向我的函数名+偏移量,例如:

kernel: epc   : ffffffffc0087ef0 my_function+0x58/0xa0 [myModule]

我做错了什么?

注意: 我无法直接使用show_regs的实际定义,因为它没有在内核代码中导出(所以我会得到一个'未定义的符号'错误)。 作为一种解决方法,我将show_regs的功能牙列原样复制到我的模块中。希望这不会引起任何问题。

1 个答案:

答案 0 :(得分:2)

得到它,下面的代码工作! :)

struct pt_regs regs;
prepare_frametrace(&regs);
show_regs(&regs);