1

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

4

1 回答 1

1

正如在Linux 内核 ARM 异常堆栈初始化详细信息中一样,Linux 使用的 IRQ 堆栈数量很少。ARM 有几个存储寄存器,包括IRQ 模式lrsp用于 IRQ 模式。在 Linux ARM 内核中,这些寄存器仅用于将信息传输到主管 (8K) 堆栈。这个监督堆栈是为每个内核进程分配的,还包含一个任务上下文块,其中包含指向内存管理器调度程序文件系统信息的指针。

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

ARM Linux 中的向量页映射有一些额外的细节,例如vector_name执行堆栈/模式切换的汇编器宏。vector_name汇编器宏是唯一在 IRQ 模式下实际执行的代码 。irq_usrirq_svc在主管模式下使用主管堆栈执行。

于 2017-01-08T20:45:25.320 回答