diff --git a/docs/kernel/debug/index.rst b/docs/kernel/debug/index.rst index 2e874265..5e6a640b 100644 --- a/docs/kernel/debug/index.rst +++ b/docs/kernel/debug/index.rst @@ -7,4 +7,4 @@ :maxdepth: 1 :caption: 目录 - kernel_api + traceback diff --git a/docs/kernel/debug/traceback.md b/docs/kernel/debug/traceback.md index 104f40f2..47766cf4 100644 --- a/docs/kernel/debug/traceback.md +++ b/docs/kernel/debug/traceback.md @@ -1,3 +1,35 @@ # 内核栈traceback -[内容待完善] \ No newline at end of file +## 简介 + +  内核栈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`函数时,其将遍历该符号表,找到对应的符号并输出。 + +--- + +## 未来发展方向 + +- 增加写入到日志文件的功能 \ No newline at end of file