在开发板上进行kdump+crash调试


前言

关于在开发板上搭建kdump+kexec环境,在内核dump时获取vmcore文件传回Ubuntu进行debug的实践

一、环境搭建

下载两个工具:crash 和 kexec-tools

crash:
https://github.com/crash-utility/crash/archive/refs/tags/7.2.8.tar.gz
编译:make target=arm64,在ubuntu上跑
kexec-tools:
http://kernel.org/pub/linux/utils/kernel/kexec/kexec-tools.tar.gz
交叉编译:./configure ARCH=arm64 LDFLAGS=-static --host=aarch64-xx-linux --prefix=$PWD/output CC="xxx/aarch64-xxx-linux-gcc --sysroot=xxxx/aarch64-xxxx-linux"
必须要CC参数,编译完后放到开发板上运行

uboot需要传入参数 crashkernel=xxM

二、使用步骤

1.运行kexec

kexec -p /init_Image --append="console=xxxx maxcpus=1 reset_devices"
注意-p和--append参数
maxcpus=1 
reset_devices

2.测试kdump环境

命令如下:

echo 1 > /proc/sys/kernel/sysrq;echo c > /proc/sysrq-trigger

实际调试时运行实际程序,如果实际调试时不触发panic,则需要确认以下参数:

sysctl -a | grep panic
sysctl -w kernel.panic=1
sysctl -w kernel.panic_on_oops=1
--------------------------------------------
kernel.hung_task_panic = 0
kernel.max_rcu_stall_to_panic = 0
kernel.panic = 1
kernel.panic_on_oops = 1
kernel.panic_on_rcu_stall = 0
kernel.panic_on_warn = 0
kernel.panic_print = 0
kernel.softlockup_panic = 1

如果没有softlockup_panic 等参数,需要配置内核,kernel trackxx目录下

重启后vmcore文件在 /proc 目录下

3.调试

crash命令

crash  vmlinux  vmcore

4.crash常用命令


1. bt: 输出内核栈backtrace
		-t:显示符号信息
		-f:显示栈的所有数据
		-l:显示文件名和行号
		pid:可以显示指定pid进程的backtrace
2. dis:显示反汇编
		-l:显示返汇编以及源代码
		-s: 显示该函数的文件名和源代码
3. rd:读内存:
		-p:读物理地址
		-u:读用户虚拟地址
		-d:显示十进制
		-s:显示符号
		-32:显示32位宽的值
		-64:显示64位宽的值
		-a:显示ascii码
4. struct:显示数据结构的定义以及实际的值
		struct_name:显示内核中定义的数据结构
		.member:显示i数据结构体中的某个成员
		struct_name address:显示该数据结构在该地址的值
		-o:显示每个成员在数据结构中的偏移,10进制
5. list:遍历链表,并可以打印链表中的成员的值
		-h:指定链表头list_head的地址
		-s:用来打印链表成员的值
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值