Linux核心的Oops問題詳解
參考:Linux: How To Locate An Oops
什麼是Oops?從語言學的角度說,Oops應該是一個擬聲詞。當出了點小事故,或者做了比較尷尬的事之後,你可以說"Oops",翻譯成中國話就叫做“哎呦”。“哎呦,對不起,對不起,我真不是故意打碎您的杯子的”。看,Oops就是這個意思。
在Linux核心開發中的Oops是什麼呢?其實,它和上面的解釋也沒什麼本質的差別,只不過說話的主角變成了Linux。當某些比較致命的問題出現時,我們的Linux核心也會抱歉的對我們說:“哎呦(Oops),對不起,我把事情搞砸了”。Linux核心在發生kernel panic時會打印出Oops資訊,把目前的暫存器狀態、堆疊內容、以及完整的Call trace都show給我們看,這樣就可以幫助我們定位錯誤。
下面,我們來看一個例項。為了突出本文的主角--Oops,這個例子唯一的作用就是造一個空指標引用錯誤。
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include
<linux/kernel.h>
#include
<linux/module.h>
static int
__init hello_init( void )
{
int *p
= 0;
*p
= 1;
return 0;
}
static void
__exit hello_exit( void )
{
|