Linux内核Call Trace调试分析方法

本文详细介绍了如何在Ubuntu系统中创建并调试一个内核模块kernel_call_trace,使用CallTrace功能捕获异常,并通过decode_stacktrace.sh工具解析堆栈跟踪信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内核Call Trace调试

参考文章

  1. 该链接讲述了Call Trace 的调试方法

decode-kernel-call-trace.md

  1. 带symbol的内核镜像安装,正常情况下/usr/lib/debug/boot/会保存带symbol的内核镜像,如果找不到,可以按照以下方式自行

https://wiki.ubuntu.com/Debug Symbol Packages

调试步骤

创建调试目录

mkdir -p ~/workspace/call_trace

设计异常模块

  1. 创建kernel_call_trace.c文件
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mm.h>

char *ptr = NULL;

int __init init_module(void) {
  //ptr = kmalloc(sizeof(int), GFP_KERNEL);

  *ptr = 0;

  printk(KERN_ALERT "Call trace:\n");
  //backtrace();

  // BUG();

  return 0;
}

void __exit cleanup_module(void) {
  //kfree(ptr);
}
  1. 创建Makefile文件
obj-m := kernel_call_trace.o

all:
        make -C /usr/src/linux-headers-$(shell uname -r) M=$(PWD) modules

clean:
        make -C /usr/src/linux-headers-$(shell uname -r) M=$(PWD) clean
  1. make,生成 kernel_call_trace.ko 模块
debug@debug-virtual-machine:~/workspace/call_trace$ make 
make -C /usr/src/linux-headers-6.2.0-37-generic M=/home/debug/workspace/call_trace modules
make[1]: Entering directory '/usr/src/linux-headers-6.2.0-37-generic'
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: x86_64-linux-gnu-gcc-11 (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
  You are using:           gcc-11 (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
  CC [M]  /home/debug/workspace/call_trace/kernel_call_trace.o
  MODPOST /home/debug/workspace/call_trace/Module.symvers
  CC [M]  /home/debug/workspace/call_trace/kernel_call_trace.mod.o
  LD [M]  /home/debug/workspace/call_trace/kernel_call_trace.ko
  BTF [M] /ho
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值