kallsyms 与 ftrace:巩固训练题(含答案与解析)

支持作者新书,点击京东购买《Yocto项目实战教程:高效定制嵌入式Linux系统》

视频教程请关注 B 站:“嵌入式 Jerry”


kallsyms 与 ftrace:巩固训练题(含答案与解析)

📘 kallsyms 部分

Q1. /proc/kallsyms 文件的每一行都包含哪三个基本字段?请说明每个字段的作用。

答案:
每行格式如下:

<地址> <类型> <符号名>
  • 地址:该符号在内核中的虚拟地址。
  • 类型:符号的类别,如 T 表示全局函数,t 表示静态函数,D/d/B/b 表示全局或静态变量。
  • 符号名:函数或变量的名称。

Q2. 有一行输出如下,如何判断它是函数还是变量?

ffff8000087a52a0 T regulator_register

答案:

  • T 表示这是一个全局导出的函数。
  • 函数的符号通常类型为 Tt,而变量类型为 D, d, B, b,因此这是一个函数。

在这里插入图片描述

Q3. kallsyms 是如何配合 ftrace 使用的?请描述其在设置 set_ftrace_filter 时的作用。

答案:

  • ftrace 使用函数名来设置跟踪目标。
  • 这些函数名必须是出现在 /proc/kallsyms 中的符号,否则无法跟踪。
  • 所以 kallsyms 提供了所有可用函数名,是 ftrace 的前置查表工具。

Q4. 如何判断当前内核是否支持 kallsyms?请列出相关配置选项和检查命令。

答案:

  1. 检查文件是否存在:

    ls /proc/kallsyms
    
  2. 检查内核配置:

    zcat /proc/config.gz | grep KALLSYMS
    

    要有:

    CONFIG_KALLSYMS=y![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f79b8c703b3f4fc689a344319cd897c0.png)
    
    CONFIG_KALLSYMS_ALL=y
    

在这里插入图片描述


Q5. perf report 中出现一段地址,如何用 kallsyms 查出这个地址对应的函数名?

答案:

  1. 记录 perf 中的地址(如 0xffff8000087a52a0

  2. 使用 grep 查找:

    grep 87a52a0 /proc/kallsyms
    
  3. 或者直接反查函数名:

    cat /proc/kallsyms | grep <部分地址>
    

🔧 ftrace 部分

Q6. 如何使用 ftrace 跟踪函数 regulator_register 的调用过程?请写出完整命令步骤。

答案:

echo function > /sys/kernel/debug/tracing/current_tracer
echo regulator_register > /sys/kernel/debug/tracing/set_ftrace_filter
echo 1 > /sys/kernel/debug/tracing/tracing_on
cat /sys/kernel/debug/tracing/trace_pipe | grep regulator_register

Q7. set_ftrace_filtertrace_pipe 的作用分别是什么?

答案:

  • set_ftrace_filter:指定你要追踪的函数。
  • trace_pipe:以实时的方式输出当前 trace 记录的调用情况。

Q8. 如果你设置好追踪函数后,trace_pipe 长时间无输出,可能有哪些原因?请至少列出三条。

答案:

  1. 该函数未被调用(如启动流程已过)。
  2. 函数名拼写错误,或并非 kallsyms 中存在的符号。
  3. 没有开启追踪:tracing_on 不是 1。
  4. 所在模块尚未加载,符号尚未注册。

Q9. ftrace 中常见的几种 tracer 类型分别适用于什么场景?

答案:

Tracer 类型作用
function跟踪函数的调用点,最常用
function_graph函数调用带层级(parent-child)结构
irqsoff跟踪中断关闭时间
preemptoff跟踪抢占关闭时间
wakeup跟踪任务唤醒路径

Q10. 使用 ftrace 时,为什么有时需要重启系统,或者在模块加载前就启用 trace?原理是什么?

答案:

  • ftrace 必须追踪的是运行中的函数。
  • 如果函数只在启动流程执行,如驱动 probe 函数,启动后不会再触发,ftrace 就无法捕捉。
  • 此时你必须在内核启动早期就启用 trace(或使用 initcall 追踪、earlyprintk 等机制)。
  • 另一个做法是卸载/重新加载模块触发 probe。

以上是今天你学习 kallsymsftrace 的完整题目与讲解总结,如果你想进一步训练,可以让我出实操型题目或者带有设备树驱动关系分析的高级题。


支持作者新书,点击京东购买《Yocto项目实战教程:高效定制嵌入式Linux系统》

视频教程请关注 B 站:“嵌入式 Jerry”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值