如何在Linux内核中打印寄存器?

时间:2011-09-27 06:53:49

标签: linux assembly kernel arm

我想从ARM上运行的linux内核代码中打印出几个寄存器的值。特别是我在linux中有以下程序集 -

e3c52007        bic     r2, r5, #7      ; 0x7
e1520003        cmp     r2, r3
0a000003        beq     c011fa60 <smem_find+0x40>

如何以kmsg打印出r2,r3和r5的值?我不想使用变量名,并希望从寄存器中获取值。

2 个答案:

答案 0 :(得分:1)

我不熟悉内核开发和简单的调试方法,但我认为这样就可以了。

size_t r2, r3, r5;

asm ("str r2, %[r2]\n"
     "str r3, %[r3]\n"
     "str r5, %[r5]\n"
 : [r2]"=m" (r2), [r3]"=m" (r3), [r5]"=m" (r5));
 printk("r2=%u r3=%u r4=%u\n", r2, r3, r5);

编辑:现在使用ARM程序集而不是x86:p

答案 1 :(得分:0)

您可以致电show_regs(struct pt_regs * regs)。此函数将在pt_regs结构上显示所有注册器。