crash_experiment

1. 编译linux kernel

添加dead lockup(soft lockup)的模拟代码arrow-up-right

## based on linux 5.4 version
$ git am 0001-test-simulate-a-deadlock-case.patch

打开soft lockup detector

$ make x86_64_defconfig
$ make menuconfig
Kernel hacking  --->
    Compile-time checks and compiler options  --->
        [*] Compile the kernel with debug info  ## CONFIG_DEBUG_INFO
    Debug Lockups and Hangs  --->
        [*] Detect Soft Lockups                 ## CONFIG_SOFTLOCKUP_DETECTOR
        [*]   Panic (Reboot) On Soft Lockups    ## CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC
$ make

2. 通过qemu捕捉vmcore

终端A,启动qemu

$ qemu-system-x86_64 -qmp tcp:localhost:4444,server,nowait ...

终端B,telnet捕捉vmcore

4. 通过crash分析vmcore

启动crash,进行分析

打印1号进程的堆栈信息

反汇编try_to_wake_up()函数

打印函数的第一个参数 p 的 pid,comm 值

保存堆栈信息

分析bta.txt,可知 不同CPU是否抢占soft lock

如果不是,分析devtmpfs_create_node()是否递归soft lockup,以此类推,一层一层往上检查。

5. 动态调试本机linux系统

以上的通过crash分析vmcore,属于静态调试linux系统,crash也支持动态调试本机linux系统

但是 ubuntu默认没有安装带调试符号的vmlinux,可以参数ubuntu官方文档进行安装,如下:

https://wiki.ubuntu.com/Debug Symbol Packagesarrow-up-right

https://wiki.ubuntu.com/Kernel/Systemtaparrow-up-right

安装之后,执行如下命令,进行调试:

例子1:通过crash查看通过vim打开的文件的内容

例子2:通过crash查看/dev/xxx

Last updated

Was this helpful?