ftrace如何跟踪中断服务程序?

时间:2017-01-08 15:40:59

标签: linux-kernel arm linux-device-driver interrupt-handling ftrace

ftrace用于内核的函数跟踪。现在它如何用于中断。它能否在中断模式下跟踪内核函数。如果是这样,你能解释它是如何工作的。我正在尝试编写一个跟踪函数调用的函数,它在 Supervisor 模式下工作正常但在中断模式下不起作用(进入循环)。我需要让它在 IRQ 模式下工作。

1 个答案:

答案 0 :(得分:1)

Linux kernel ARM exception stack init详细信息一样,Linux使用的IRQ堆栈数量很少。 ARM有几个存储寄存器,包括lrsp用于IRQ模式。在Linux ARM内核中,这些寄存器仅用于简单地将信息传输到管理程序(8K)堆栈。此管理程序堆栈按内核进程分配,还包含任务上下文块,其中包含指向内存管理器调度程序文件系统的指针信息。

因此在Linux中,管理程序堆栈具有所有模式的堆栈信息,包括FIQ,IRQ,未定义指令,数据和指令错误。这意味着只需要跟踪一个堆栈。特殊信息(伪汇编程序)包含在entry-armv.S中,例如UNWIND(.fnend)ENDPROC(__irq_usr),它使用ELF信息注释内核以创建允许堆栈跟踪代码理解布局的展开表。堆栈上的数据。

Vector page mapping in ARM Linux有一些额外的细节,例如进行堆栈/模式切换的vector_name汇编程序宏。 vector_name汇编程序宏是唯一在IRQ模式下实际执行的代码。 irq_usrirq_svc使用管理程序堆栈以管理员模式执行。