简介
内核栈traceback的功能位于kernel/debug/traceback/
文件夹中。为内核态提供traceback的功能,打印调用栈到屏幕上。
具体的使用场景如:内核出错的时候,打印调用栈,以便定位原因。演示如下图所示:
API
void traceback(struct pt_regs * regs)
作用
该接口定义于kernel/debug/traceback/traceback.h
中,将会对给定内核栈进行traceback,并打印跟踪结果到屏幕上。
参数
regs
要开始追踪的第一层内核栈栈帧(也就是栈的底端)
实现原理
当内核第一次链接之后,将会通过Makefile中的命令,运行kernel/debug/kallsyms
程序,提取内核文件的符号表,然后生成kernel/debug/kallsyms.S
。该文件的rodata段中存储了text段的函数的符号表。接着,该文件将被编译为kallsyms.o
。最后,Makefile中再次调用ld
命令进行链接,将kallsyms.o链接至内核文件。
当调用traceback
函数时,其将遍历该符号表,找到对应的符号并输出。
未来发展方向
- 增加写入到日志文件的功能
来源
代码语言:txt复制本文的当前版本编写于2022年7月17日,基于GPLv2协议开源于[github.com/fslongjin/DragonOS](http://github.com/fslongjin/DragonOS),对应commit为:[https://github.com/fslongjin/DragonOS/commit/427c71b3277673020310aa49b80df56dfc8991aa](https://github.com/fslongjin/DragonOS/commit/427c71b3277673020310aa49b80df56dfc8991aa)
转载请注明来源:https://cloud.tencent.com/developer/article/2146034