ftrace
用于内核的功能跟踪。现在它如何处理中断。它可以在中断模式下跟踪内核功能吗?如果是这样,你能解释一下它是如何工作的。我正在尝试编写一个跟踪函数调用的函数,它在主管模式下工作正常,但在中断模式下不起作用(进入循环)。我需要让它在IRQ模式下工作。
问问题
686 次
1 回答
1
正如在Linux 内核 ARM 异常堆栈初始化详细信息中一样,Linux 使用的 IRQ 堆栈数量很少。ARM 有几个存储寄存器,包括IRQ 模式lr
和sp
用于 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_usr
并irq_svc
在主管模式下使用主管堆栈执行。
于 2017-01-08T20:45:25.320 回答