文章出處:
在核心**中,經常會看到一些除錯函式,如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...