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

如何将Linux内核跟踪信息输出至控制台(重启问题调试)

让tracefs跟踪信息直接输出到控制台的方案

针对你遇到的重启阶段无法导出trace文件的问题,确实可以通过配置内核参数和tracefs选项,让跟踪信息实时打印到控制台。以下是具体操作:

一、内核启动参数直接配置

直接在内核命令行添加以下参数,就能让function_graph等跟踪器的输出同步到控制台:

  • trace_printk:开启trace_printk输出到控制台的基础开关
  • ftrace=function_graph:启用function_graph跟踪器(如果需要其他跟踪器,替换成function等即可)
  • trace_options=printk:核心配置——让所有跟踪缓冲区的内容同时输出到控制台,而不是只存在/sys/kernel/tracing/trace文件里

你之前只加了tp_printk没用,是因为这个参数只针对tracepoint事件的输出,而function_graph属于ftrace跟踪器,必须靠trace_options=printk才能把它的输出导到控制台。

二、自定义跟踪范围的提前配置(可选)

如果需要只跟踪重启相关的函数(减少控制台输出噪音),可以在系统启动后预先配置tracefs,配置会在重启阶段生效:

  1. 挂载tracefs(若未自动挂载):mount -t tracefs nodev /sys/kernel/tracing
  2. 切换到function_graph跟踪器:echo function_graph > /sys/kernel/tracing/current_tracer
  3. 设置过滤规则(比如只跟踪reboot相关函数):echo reboot* > /sys/kernel/tracing/set_ftrace_filter
  4. 开启控制台输出:echo 1 > /sys/kernel/tracing/trace_options/printk
  5. 启动跟踪:echo 1 > /sys/kernel/tracing/tracing_on

把这些命令写到启动脚本(比如/etc/rc.local)里,每次系统启动都会自动配置好,重启时的跟踪日志就会实时打在控制台。

三、额外优化建议

  • 调高控制台日志级别:添加loglevel=8到内核命令行,确保调试信息不会被截断(默认loglevel=7会过滤部分调试输出)
  • 用串口捕获日志:如果系统重启时控制台输出被覆盖,建议启用串口控制台,通过串口工具全程捕获输出,即使系统hang住,串口日志也能完整保留
  • 针对偶现hang问题:如果重启是hang而非oops,ftrace_dump_on_oops参数可能没用,还是靠trace_options=printk的实时输出更可靠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:15:27