我正在尝试从我的内核模块打印多个点的当前寄存器值。 这是我正在使用的代码:
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的功能牙列原样复制到我的模块中。希望这不会引起任何问题。
答案 0 :(得分:2)
得到它,下面的代码工作! :)
struct pt_regs regs;
prepare_frametrace(®s);
show_regs(®s);