ftrace用于内核的函数跟踪。现在它是如何对中断起作用的。能在中断模式下跟踪内核功能吗?如果是的话,你能解释一下它是如何工作的吗?我正在尝试编写一个跟踪函数调用的函数,它在Supervisor模式下工作良好,但在中断模式(进入循环)中不工作。我需要使它在IRQ模式下工作。
发布于 2017-01-08 20:45:25
与Linux内核ARM异常堆栈init的细节一样,Linux使用的IRQ堆栈的数量很少。ARM有几个存储寄存器,包括用于IRQ模式的lr和sp。在Linux内核中,这些寄存器仅用于向监管器(8K)堆栈传输信息。这个监督堆栈是每个内核进程分配的,还包含一个任务上下文块,其中包含指向内存管理器、调度程序和文件系统信息的指针。
因此,在Linux中,监控程序栈拥有所有模式的堆栈信息,包括FIQ、IRQ、未定义指令、数据和指令错误。这意味着只需要跟踪一个堆栈。entry-armv.S中包含特殊信息(伪汇编程序),例如UNWIND(.fnend)和ENDPROC(__irq_usr),它们用ELF信息对内核进行注释,以创建允许堆栈跟踪代码理解堆栈上数据布局的展开表。
ARM Linux中的矢量页面映射还有一些额外的细节,比如vector_name汇编程序宏,它执行堆栈/模式切换。vector_name汇编程序宏是在IRQ模式下实际执行的唯一代码。irq_usr和irq_svc在监控器模式下执行,并使用主管堆栈。
https://stackoverflow.com/questions/41534450
复制相似问题