crash_experiment
1. 编译linux kernel
添加dead lockup(soft lockup)的模拟代码
## 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
$ make2. 通过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 Packages
https://wiki.ubuntu.com/Kernel/Systemtap
安装之后,执行如下命令,进行调试:
例子1:通过crash查看通过vim打开的文件的内容
例子2:通过crash查看/dev/xxx
Last updated
Was this helpful?