Kprobes
Kprobes 允许你在任意内核指令地址上设置断点,并在执行到达该位置时运行自定义处理程序。该技术是非中断性的——运行中的内核不会停止,其他 CPU 继续执行。Kprobes 的工作原理
- 你在符号或地址上注册一个探针。
- 内核将目标指令替换为陷阱(trap)。
- 当陷阱触发时,kprobe 处理程序在与被中断代码相同的上下文中运行。
- 内核恢复原始指令并继续执行。
- 跟踪调度器事件(
schedule()、try_to_wake_up()) - 统计慢速代码路径的执行次数
- 捕获调用参数,而无需添加
printk并重新构建
Kconfig
通过 tracefs 使用 kprobe 跟踪事件
使用 kprobes 最简单的方式是通过 tracefs 的kprobe_events 接口:
Ftrace
Ftrace 是内核内置的函数跟踪器。它可以记录内核中的每个函数调用、跟踪特定子系统,或分析对延迟敏感的代码路径。结果从 tracefs 接口(/sys/kernel/tracing/)读取。
函数跟踪器
function 跟踪器记录每个被调用的内核函数的名称和 CPU:
函数调用图跟踪器
function_graph 跟踪器记录每个函数的进入和退出,包括执行时间。可用于识别慢速代码路径:
跟踪启动 initcall
添加到内核命令行,以在启动时跟踪所有 initcall:MMIO 跟踪事件
内存映射 I/O(MMIO)跟踪记录内核通过__raw_{read,write}{b,l,w,q} 访问器执行的每次寄存器读写。它们对于在 Qualcomm® SoC 上诊断以下崩溃类别至关重要:
表:MMIO 崩溃场景
启用 MMIO 跟踪
Kconfig:rwmmio 跟踪事件:
readl/writel/writeq)和物理地址。将该地址与 SoC 技术参考手册进行对照,以识别崩溃所涉及的寄存器模块。

