当系统触发dump时会将各个cpu的上下文信息(即各个寄存器的值)保存进dump文件的执行位置,芯片厂商提供的解析工具可以从dump文件中解析出系统奔溃时刻各个cpu的现场,并保存进一个cmm脚本中。例如MTK对应的脚本名称为debug.cmm,高通平台对应的脚本名称为corevcpuN_regs.cmm。下图以高通为例,在corevcpu6_regs.cmm中记录了...
当系统触发dump时会将各个cpu的上下文信息(即各个寄存器的值)保存进dump文件的执行位置,芯片厂商提供的解析工具可以从dump文件中解析出系统奔溃时刻各个cpu的现场,并保存进一个cmm脚本中。例如MTK对应的脚本名称为debug.cmm,高通平台对应的脚本名称为corevcpuN_regs.cmm。下图以高通为例,在corevcpu6_regs.cmm中记录了...
既然有 typedef struct user_pt_regs bpf_user_pt_regs_t; 那么 whatis user_pt_regs 和 whatis bpf_user_pt_regs_t 输出是一样的。 查看包含指向 struct mm_struct 类型的所有结构体 crash> whatis -m mm_struct SIZE TYPE 24 map_info 24 ptdump_info 24 trace_event_raw_mm_collapse_huge_page 32...
(5)dump_backtrace函数 该函数用于打印函数的调用关系。Fp为帧指针,用于追溯程序的方式,方向跟踪调用函数。该函数主要是fp进行检查,看看能否进行backtrace,如果可以就调用汇编的c_backtrace,在arch/arm/lib/backtrace.S函数中。 static void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk) { unsigne...
dump_instr(KERN_EMERG, regs); } } 在上面的函数中,主要使用了thread_info,task_struct,sp之间的指向关系。task_struct结构体的成员stack是栈底,也是对应thread_info结构体的地址。堆栈数据是从栈底+8K的地方开始向下存的。SP指向的是当前的栈顶。(unsigned long)task_stack_page(tsk), ...
dump_instr(KERN_EMERG, regs); } } 在上面的函数中,主要使用了thread_info,task_struct,sp之间的指向关系。task_struct结构体的成员stack是栈 底,也是对应thread_info结构体的地址。堆栈数据是从栈底+8K的地方开始向下存的。SP指向的是当前的栈顶。(unsigned long)task_stack_page(tsk), ...
static void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk) { unsigned int fp, mode; int ok = 1; printk("Backtrace: "); if (!tsk) tsk = current; if (regs) { fp = regs->ARM_fp; mode = processor_mode(regs); ...
dump_backtrace(regs, tsk); dump_instr(KERN_EMERG, regs); } } 在上面的函数中,主要使用了thread_info,task_struct,sp之间的指向关系。task_struct结构体的成员stack是栈 底,也是对应thread_info结构体的地址。堆栈数据是从栈底+8K的地方开始向下存的。SP指向的是当前的栈顶。(unsigned long)task_stack_page...
可以在编译内核的地方找到,我这里就是用的这个。crash /home/lt/lightswap/linux-4.11-hmtt/vmlinux /var/crash/202201121743/dump.202201121743 可以进入crash控制台,提示正常进入 WARNING: kernel relocated[418MB]: patching92251gdb minimal_symbol values
提供给crash工具的,除了coredump文件,还需要产生这个coredump的内核的镜像文件。不过,假设你直接用"extract-vmlinux"工具来解压"/boot"目录下的vmlinuz镜像文件,把得到的vmlinux喂给crash,将会得到crash的无情报错: 提示很明显,crash要的是包含了调试信息的内核镜像。如果是自己编译内核,那么应该在config文件里设置"CONF...