1 CPU支持ECC的话打开ECC,并且在系统异常中断的时候打印出来,因为内存多bit ECC会导致系统异常。
MCHECK_EXCEPTION(0x200, Machine, machine_exception)
=>static struct cpu_spec __initdata cpu_specs[]
/* e500v2 */
.machine_check = machine_check_e500,
.platform = "ppc8548",
machine_check_e500
=>unsigned long reason = get_mc_reason(regs);
=>if (reason & MCSR_BUS_WBERR)
printk("Bus - Write Data Bus Error\n");
=>打印regs->nip//出现异常等指令地址
bus有一种可能性是内存出现ECC错误,可以在这里打印内存ECC错误寄存器信息
2 内核的hung task检测;
3 内核的原子操作不能有休眠动作的检测
“BUG: sleeping function called from invalid context at ……”(might_sleep函数说明)
http://blog.csdn.net/hp0773/article/details/12658501
4 coredump。用户态异常,没有挂接私有信号处理函数,导致coredump,详见《信号处理学习心得》
注意
#ulimit -c //真相
0
#ulimit //假象
ulimited
需要修改
#ulimit -c unlimited
修改后
再查
#ulimit -c
ulimited
调试程序,会在当前路径生成 core
可以修改路径:
echo /root/core_%p > /proc/sys/kernel/core_pattern
生成的core在/root目录下,后缀是调试程序的进程号
5关于死锁
一次spinlock死锁故障的定位(太经典,收藏!) http://blog.csdn.net/lqxandroid2012/article/details/53581076
spin_lock浅析【转】 - 张昺华-sky - 博客园 http://www.cnblogs.com/sky-heaven/p/7121582.html =》这个人的博客有很多好文章
驱动程序的调测方法与技巧 http://blog.csdn.net/lichangc/article/details/43272457
如下文章写得挺好
linux kernel oops linux 异常分析
http://www.cnblogs.com/wahaha02/p/5363793.html
根据PPC反汇编代码分析堆栈内容
http://blog.csdn.net/lijzheng/article/details/38796525
PowerPC构架应用程序二进制接口(ABI)及堆栈帧详解
http://blog.sina.com.cn/s/blog_70dd16910100ypf2.html