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

如何在Linux内核中打印寄存器?,linux,assembly,linux-kernel,arm,cpu-registers,Linux,Assembly,Linux Kernel,Arm,Cpu Registers,我想从ARM上运行的linux内核代码中打印出几个寄存器的值。特别是我在linux中有以下程序集- e3c52007 bic r2, r5, #7 ; 0x7 e1520003 cmp r2, r3 0a000003 beq c011fa60 <smem_find+0x40> e3c52007 bic r2,r5,#7;0x7 e1520003凸轮轴位置r2,r3 0a000003 beq c011fa60

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

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

如何在kmsg中打印r2、r3和r5的值?我不想使用变量名,而是想从寄存器中获取值。

我不太熟悉内核开发和简单的调试方法,但我想这可以完成我的工作

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

我对内核开发和简单的调试方法不太熟悉,但我想这可以完成我的工作

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

可以调用
show_regs(struct pt_regs*regs)
。此函数将显示pt_regs结构上的所有寄存器。

您可以调用
show_regs(struct pt_regs*regs)
。此函数将显示pt_regs结构上的所有寄存器。

我记不清了,但我认为dump_堆栈也可能打印寄存器值。我现在有太多的代码要检查,以发现这一点:PI不能正确地记住,但我认为dump_堆栈可能也会打印寄存器值。我现在有太多的代码要检查,以发现尽管:Pprintk而不是kprintf ofc:printk而不是kprintf ofc: