1.之前通过修改grub、kdump.conf,可以确保当前系统中的kdump服务正常:
/etc/rc.d/init.d/kdump status
Kdump is operational
- 此外,通过“”echo c > /proc/sysrq-trigger“”的方法,每次都可以切换到kdump系统
2.目前的问题是:
- 在一些内核崩溃的场景中,没有切换到kdump系统
- 我增加了一些打印,确认是在内核:panic->crash_kexec->machine_kexec->load_segments()时,内联了汇编代码:
static void load_segments(void)
{
__asm__ __volatile__ (
"\tmovl %0,%%ds\n"
"\tmovl %0,%%es\n"
"\tmovl %0,%%ss\n"
"\tmovl %0,%%fs\n"
"\tmovl %0,%%gs\n"
: : "a" (__KERNEL_DS) : "memory"
);
}
- 进入这些汇编之后,就没有出来,也没有通过relocate_kernel()完成内核的切换
哪位前辈熟悉汇编,或者内核crash的机制,能不能给解释一下:
a.这些汇编实在干啥
b.像我这种情况,可能哪里还有问题
对了,这个问题可以通过自动化脚本进行复现,也就是说是必现的,是否还有一些打印可以做,也希望指点。汇编不熟啊。。。