前言

与前同事交流,发现以前的技术经历与解决的问题,现在接触不多,但是想想还是很有意思,虽然很多细节现在已经不能表达出来或展示出来,但是还得写出来。下面写的得主要个人经历的linux内核crash原因。

内存类

这一类同用户态类似,主要有以下几种情况,

  1. 访问NULL
  2. 访问释放后的内存
  3. 非法访问内存
  4. 内存被踩
  5. 内存耗尽
  6. 野指针操作

堆栈类

  1. 内核调用栈溢出
  2. 写坏调用栈

  1. 死锁
  2. rcu使用错误
  3. 锁内存被写坏
  4. 长期获取不到锁,导致看门狗饿死,狗叫重启

调度

  1. 线程陷入死循环或者长时间占用cpu,在非抢占模式下其他线程得不到调度

中断上下文

  1. 在中断上下文调用错误的函数,例如在中断上下文使用信号量,更多参考那些可进入睡眠状态的Linux内核函数

硬件故障

在系统运行过程出现硬件故障也会导致内核crash。接触较少,不作说明。

后记

能力有限,条件有限,写的很虚,也不全面,以后有机会再来点实际的,这个目的主要是回忆总结自己的知识体系。