所谓Linux panic就是碰到错误情况时, code里主动调的一个函数panic(),里面出不来,会让cpu重启。 不允许再乱执行代码,以便保留现场。 像下面这个例子,就是在kernel fault函数里检查到非法无效地址访问后的错误处理,主动调了panic(). 通过访问地址可以区分是kernel代码(>0xC0000000)还是user space 代码。
writing 'C' to /proc/sysrq-trigger is like sysrq-C
echo c > /proc/sysrq-trigger
代码在: \kernel\drivers\tty\sysrq.c
本质上是操作NULL 指针引起crash
调用路径: 从下往上 panic die __do_kernel_fault do_page_fault do_DataAbort __dabt_svc sysrq_handle_crash __handle_sysrq write_sysrq_trigger proc_reg_write vfs_write sys_write ret_fast_syscall