Linux到底在何时panic

转载 2012年03月21日 08:50:06
 遇到内核panic,我们很无奈,我们总是以为内核自动的检查出了错误,然后panic了,可事实上,panic是一个函数,需要显式调用的,panic机制固然是一种检查内核正常的好机制,可是其背后隐藏了大量内核开发者的心血,内核开发者必须知道什么情况下内核属于不正常状态,然后显式调用panic,如果此时不调用panic的话,说实话,系统还是会继续运行的,然而结果会真的“不可预料”,在遇到惶恐之事件的时候,最好的办法就是呆在原地,也就是panic。

    对于纯程序员来讲,特别是习惯于使用“库”的程序员来讲,他们总是认为肯定“底层”会捕获错误的,唯一的例外是c语言的malloc/free,用malloc/free来阐述panic机制应该再好不过了。malloc的内存当然要在不使用的时候free掉,然而即使你free了,这个内存对于操作系统来讲可能还是可用的,也就是说在页表中还是具有映射的,只是对于程序来讲,它已经不能再使用了。操作系统和程序并不站在一个层次考虑问题,操作系统比程序更底层,由于设计原因它只提供机制,因此它并不知道内存的实际用处,它对内存访问的约束是很小的,只要求页表中有映射即可,然而程序却对内存的使用有着更多的依赖,且这种依赖并不为内核所知,因此应用程序必须自己管理内存的使用。

    对于panic的机制而言,由于它是内核的机制,因此也不能指望更底层的机制发现错误并调用它,而是需要自己调用。更底层的无非就是cpu硬件了,对于cpu而言,它的约束更少,它只是顺序得从物理内存中取得一个指令,然后执行之,仅此而已,至于是什么指令它不管。如果它取出的不是指令,cpu会触发一个异常,异常号为6,在操作系统初始化的时候需要设置这个异常处理程序:

    set_trap_gate(6,&invalid_op);

    这也许是cpu提供的最后的措施了,你完全可以在6号异常的处理函数中什么都不做。接下来cpu只管不断取出指令不断执行。试想一种情况,如果panic函数所在的内存被清零了,会发生什么?panic还会调用吗?注意,cpu的hlt指令并不能使cpu停止运行,若想其停止运行,必须借助外部的电源电路。而且也不要觉得在操作系统中输入reboot之后系统就会重启,因此就认为cpu有所谓的复位功能,其实cpu并没有复位,而仅仅跳转到了计算机刚启动时实模式的某一个地址中去了。

    现在先在/proc/kallsyms中找到panic的地址:

    c126c156 T panic

    我们根据linux的内存映射模型,知道panic的物理地址是0x126c156,于是我们执行下面的操作:

    dd if=/dev/zero of=/dev/mem bs=1 count=128 seek=0x126c156

    然后写一个module,在init函数中直接调用panic,这样我们在insmod的时候,内核会报段错误,因此即使你设置了kernel.panic=1,也不要指望系统在panic后1秒后重启,因为系统根本就不会panic了,panic已经没个球了。

    正如应用程序员需要严守malloc/free一样,内核的编写者必须明确何时应该panic。

linux到底在何时panic

http://blog.csdn.net/dog250/article/details/6300343 遇到内核panic,我们很无奈,我们总是以为内核自动的检查出了错误,然后panic了,可事实上...
  • cjsycyl
  • cjsycyl
  • 2013年06月05日 08:57
  • 448

Linux到底在何时panic

遇到内核panic,我们很无奈,我们总是以为内核自动的检查出了错误,然后panic了,可事实上,panic是一个函数,需要显式调用的,panic机制固然是一种检查内核正常的好机制,可是其背后隐藏了大量...
  • hunanchenxingyu
  • hunanchenxingyu
  • 2013年01月05日 10:21
  • 1028

linux panic 记录文件

1     设计 1.1    技术 使用kdump(kexec)引导第二个内核启动,在第二个内核中捕捉panic信息,同时将系统内核的内存镜像存储到/proc/vmcore文件中,由于此文件与内...
  • wdq347
  • wdq347
  • 2015年06月02日 18:17
  • 2040

Linux kernel Panic后自动重启机器的设置

Linux kernel Panic后自动重启机器的设置 方法1:内核配置命令行加入这句,崩溃后3秒重启: panic=3 设置kernel系统参数: 方法2: vi /etc/...
  • yihui8
  • yihui8
  • 2015年06月13日 09:42
  • 2991

制造一个空指针,来触发linux的panic

因为学习system dump和crash工具的愿意,打算制造一个panic分析一把。原以为制造一个空指针很容易,但是当你刻意想犯错的时候,却发现,原来这个也很难。 结论是两中情况可以触发pani...
  • coder_jack
  • coder_jack
  • 2014年12月08日 14:34
  • 1065

Linux kernel panic问题解决方法

本文转载自:http://blog.csdn.net/willand1981/article/details/5663356
  • liujiaoyage
  • liujiaoyage
  • 2014年07月09日 14:02
  • 1338

linux panic 问题定位

本文希望可以一直更新,记录下我所遇见的
  • wdq347
  • wdq347
  • 2014年09月28日 15:04
  • 5299

Linux Kernel Panic报错解决思路

Linux虽然没有蓝屏现象,不过Kernel报错有时也会让人头疼。有时重启后正常,linux系统运行一段时间后又down了,总不能出现问题就reboot啊。我从网上搜集一下资料,整理了出来,希望大家能...
  • u011565090
  • u011565090
  • 2014年11月06日 10:48
  • 4081

kernel panic 分析解决方法

kernel panic 表示Linux kernel走到了一个不知道该怎么走下一步的状况,一 旦到这个情况,kernel就尽可能把它此时能获取的全部信息都打印出来,至于能打印出多少信息。  下面...
  • lickylin
  • lickylin
  • 2014年02月13日 21:33
  • 13127

嵌入式Linux启动过程中的问题积累 --补充kernel panic的非EBAI问题

嵌入式Linux启动过程中的问题积累 博文原地址:http://blog.csdn.net/dzassn/article/details/1953993 1.Bad Magic...
  • pengrui18
  • pengrui18
  • 2014年01月15日 22:31
  • 1993
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux到底在何时panic
举报原因:
原因补充:

(最多只允许输入30个字)