You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

内核重启后期调试:如何将ftrace输出至串口控制台?

内核关机后期阶段的ftrace追踪方案

一、强制ftrace输出到串口控制台

ftrace本身依赖内核printk子系统,只要内核配置了串口控制台,关机后期printk会自动切换到串口输出。按以下步骤配置:

  1. 确保内核编译时开启CONFIG_SERIAL_CONSOLE和CONFIG_PRINTK,这是串口输出的基础。
  2. 开机后配置ftrace:
    # 仅追踪目标函数
    echo acpi_sleep_prepare > /sys/kernel/tracing/set_ftrace_filter
    # 启用函数追踪模式
    echo function > /sys/kernel/tracing/current_tracer
    # 开启追踪开关
    echo 1 > /sys/kernel/tracing/tracing_on
    # 可选:确保原子操作环境下也能输出日志
    echo 1 > /sys/kernel/tracing/trace_options/printk-atomics
    
  3. 内核启动参数添加console=ttyS0,115200(替换成你的实际串口设备和波特率),强制系统全程保留串口控制台,避免关机后期被关闭。

二、ftrace失效时的替代方法

如果串口驱动在关机后期被卸载导致ftrace输出中断,试试这两种方案:

  • 环形缓冲区事后分析:
    ftrace的追踪数据存在内存环形缓冲区里,即使输出断了,数据仍会保留。提前开启内核的CONFIG_CRASH_DUMP和CONFIG_PROC_VMCORE,并设置:
    echo 1 > /sys/kernel/tracing/trace_options/disable_on_free
    
    防止缓冲区被释放。系统重启后用crash工具加载vmcore镜像,读取/sys/kernel/tracing/trace的内容即可获取追踪数据。
  • 静态插桩直接输出:
    直接修改内核源码,在acpi_sleep_prepare函数开头添加printk语句,输出你需要的参数或执行状态,重新编译内核。这种方法不依赖ftrace,printk在关机后期会优先走串口,可靠性更高。

内容的提问来源于stack exchange,提问作者George Shuklin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:25:02