支持作者新书,点击京东购买《Yocto项目实战教程:高效定制嵌入式Linux系统》
视频教程请关注 B 站:“嵌入式 Jerry”
kallsyms 与 ftrace:巩固训练题(含答案与解析)
📘 kallsyms 部分
Q1. /proc/kallsyms 文件的每一行都包含哪三个基本字段?请说明每个字段的作用。
答案:
每行格式如下:
<地址> <类型> <符号名>
- 地址:该符号在内核中的虚拟地址。
- 类型:符号的类别,如
T表示全局函数,t表示静态函数,D/d/B/b表示全局或静态变量。 - 符号名:函数或变量的名称。
Q2. 有一行输出如下,如何判断它是函数还是变量?
ffff8000087a52a0 T regulator_register
答案:
T表示这是一个全局导出的函数。- 函数的符号通常类型为
T或t,而变量类型为D,d,B,b,因此这是一个函数。

Q3. kallsyms 是如何配合 ftrace 使用的?请描述其在设置 set_ftrace_filter 时的作用。
答案:
ftrace使用函数名来设置跟踪目标。- 这些函数名必须是出现在
/proc/kallsyms中的符号,否则无法跟踪。 - 所以
kallsyms提供了所有可用函数名,是ftrace的前置查表工具。
Q4. 如何判断当前内核是否支持 kallsyms?请列出相关配置选项和检查命令。
答案:
-
检查文件是否存在:
ls /proc/kallsyms -
检查内核配置:
zcat /proc/config.gz | grep KALLSYMS要有:
CONFIG_KALLSYMS=y CONFIG_KALLSYMS_ALL=y

Q5. perf report 中出现一段地址,如何用 kallsyms 查出这个地址对应的函数名?
答案:
-
记录 perf 中的地址(如
0xffff8000087a52a0) -
使用 grep 查找:
grep 87a52a0 /proc/kallsyms -
或者直接反查函数名:
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_filter 和 trace_pipe 的作用分别是什么?
答案:
set_ftrace_filter:指定你要追踪的函数。trace_pipe:以实时的方式输出当前 trace 记录的调用情况。
Q8. 如果你设置好追踪函数后,trace_pipe 长时间无输出,可能有哪些原因?请至少列出三条。
答案:
- 该函数未被调用(如启动流程已过)。
- 函数名拼写错误,或并非
kallsyms中存在的符号。 - 没有开启追踪:
tracing_on不是 1。 - 所在模块尚未加载,符号尚未注册。
Q9. ftrace 中常见的几种 tracer 类型分别适用于什么场景?
答案:
| Tracer 类型 | 作用 |
|---|---|
function | 跟踪函数的调用点,最常用 |
function_graph | 函数调用带层级(parent-child)结构 |
irqsoff | 跟踪中断关闭时间 |
preemptoff | 跟踪抢占关闭时间 |
wakeup | 跟踪任务唤醒路径 |
Q10. 使用 ftrace 时,为什么有时需要重启系统,或者在模块加载前就启用 trace?原理是什么?
答案:
ftrace必须追踪的是运行中的函数。- 如果函数只在启动流程执行,如驱动 probe 函数,启动后不会再触发,
ftrace就无法捕捉。 - 此时你必须在内核启动早期就启用 trace(或使用 initcall 追踪、earlyprintk 等机制)。
- 另一个做法是卸载/重新加载模块触发 probe。
以上是今天你学习 kallsyms 和 ftrace 的完整题目与讲解总结,如果你想进一步训练,可以让我出实操型题目或者带有设备树驱动关系分析的高级题。
支持作者新书,点击京东购买《Yocto项目实战教程:高效定制嵌入式Linux系统》
视频教程请关注 B 站:“嵌入式 Jerry”
1054

被折叠的 条评论
为什么被折叠?



