我正在尝试从我的内核模块打印多个点的当前寄存器值。 这是我正在使用的代码:
struct pt_regs *regs = task_pt_regs(current);
show_regs(regs);
这可行,但看起来上下文不正确。 例如,epc 总是显示低于值,尽管我在文件中的多个位置都有此代码。
kernel: epc : ffffffff8023a510 kernel_thread_helper+0x0/0x18
即函数名称始终为“kernel_thread_helper”。
如果发生内核 panic ,我会得到指向我的函数名称+偏移量的epc值,例如:
kernel: epc : ffffffffc0087ef0 my_function+0x58/0xa0 [myModule]
我做错了什么?
注意: 我无法直接使用 show_regs 的实际定义,因为它没有在内核代码中导出(因此我将收到“ undefined symbol ”错误)。 作为解决方法,我将 show_regs 的函数齿列按原样复制到我的模块中。希望这不会引起任何问题。
最佳答案
明白了,下面的代码有效! :)
struct pt_regs regs;
prepare_frametrace(®s);
show_regs(®s);
关于linux - 如何从内核代码打印当前寄存器值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21375329/