linux核心中的BUG 和 BUG ON

2021-06-16 12:57:33 字數 944 閱讀 4965

文章出處:

在核心**中,經常會看到一些除錯函式,如bug,bug_on等。

使用前,先在核心配置中把kernel debug選上:

make menuconfig:

kernel hacking-->

kernel debug

作用:一些核心呼叫可以用來方便標記bug,提供斷言並輸出資訊。最常用的兩個是bug()

bug_on()

當被呼叫的時候,它們會引發oops,導致棧的回溯和錯誤資訊的列印

。為什麼這些宣告會導致 oops跟硬體的體系結構是相關的。

大部分體系結構把bug()和bug_on()定義成某種非法操作,這樣自然會產生需要的oops。你可以把這些呼叫當作斷言使用,想要斷言某種情況不該發生

:if (bad_thing)

bug();

或者使用更好的形式:

bug_on(bad_thing);//bug_on是乙個函式介面,一般開發人員自己實現相關函式內容

,一般用來判斷核心是否出現問題,如果引數為真的話,證明核心出現了//bug,列印bug資訊,然後呼叫panic函式,讓系統panic。

可以用panic()引發更嚴重的錯誤。呼叫panic()不但會列印錯誤訊息而且還會掛起整個系統。顯然,你只應該在極端惡劣的情況下使用它:

if (terrible_thing)

panic("foo is %ld/n", foo);

有些時候,你只是需要在終端上列印一下棧的回溯資訊來幫助你測試。此時可以使用dump_stack()。它只在終端上列印暫存器上下文和函式的跟蹤線索:

if (!debug_check)

Linux核心中的list for each

在linux核心原始碼中,經常要對鍊錶進行操作,其中乙個很重要的巨集是list for each entry 意思大體如下 假設只有兩個結點,則第乙個member代表head,list for each entry的作用就是迴圈遍歷每乙個pos中的member子項。巨集list for each e...

Linux核心中的Namespace

linux核心中的namespace提供了乙個輕量級的基於系統呼叫層面的虛擬化解決方案。相比傳統的使用 vmware,qemu,xen,kvm,hurd的虛擬 圖1所示 基於namespace的輕量級虛擬具有易使用,易管理,無需硬體虛擬化支援,低 成本等優點。圖 1.namespace又稱conta...

linux核心中的 config

經過make menuconfig 生成 config 決定哪些驅動編譯到核心,哪些驅動編譯為模組 那為什麼呢?舉個例子分析一下 eg 在.config 中有 config dm9000 y grep config dm9000 r 1.c檔案中 arch arm mach s5pv210 mach...