2014-11-24 236 views
2

我們在基於MIPS的嵌入式設備領域遇到了內核恐慌。如何在MTD分區中記錄內核恐慌痕跡?我們是否必須將跟蹤寫入MTD,還是可以寫入NFS?任何人都可以解釋如何在遠程盒子的恐慌之後獲得有用的內核痕跡。Mips Linux:將內核恐慌記錄到mtd分區中

回答

3

您可以打開內核中的mtdoops模塊並將內核恐慌記錄記錄到mtd分區上。我不認爲我們可以通過NFS編寫恐慌追蹤。不過,你可能想探索一下ramoops。

以下是配置內核捕獲內核oops到mtd閃存的步驟。在內核恐慌之後捕獲堆棧跟蹤對於調試內核問題特別是在現場發生的問題是無價的。在mtdoops模塊初始化過程中,mtd分區會變成循環緩衝區並被預先擦除。

  1. 內核標誌,CONFIG_MTD_OOPS,配置內核寫哎呀堆棧跟蹤到MTD分區。這個MTD dev分區信息可以在mtdoops模塊內進行硬編碼,也可以動態指定。該組件可以作爲內核的一部分或作爲單獨的模塊構建。在構建內核之前,您需要確保您的mtd設備已經註冊了panic_write處理程序。記住,正常的mtd寫入處理程序是不夠的,因爲在內核恐慌之後我們必須寫入mtd內存。如果mtd設備沒有自己的恐慌寫入處理程序,請運行this修補程序。

    當作爲內核的一部分構建時,CONFIG_MTD_OOPS = y,mtdoops模塊需要使用閃存分區信息(mtddev)進行修補。

--- ./drivers/mtd/mtdoops.c.orig 2014-11-17 12:06:59.000000000 +0000 
+++ ./drivers/mtd/mtdoops.c 2014-11-17 12:07:36.000000000 +0000 
@@ -44,7 +44,7 @@ 
MODULE_PARM_DESC(record_size, 
"record size for MTD OOPS pages in bytes (default 4096)"); 

-static char mtddev[80]; 
+static char mtddev[80]="/dev/oops"; 
module_param_string(mtddev, mtddev, 80, 0400); 
MODULE_PARM_DESC(mtddev, 
"name or index number of the MTD device to use"); 

雖然構建它作爲模塊,CONFIG_MTD_OOPS = m,則閃存分區信息模塊安裝(insmod的)期間動態地提供。

insmod的mtdoops.ko mtddev =的/ dev /糟糕

除了使MTP OOPS標誌,別配置,CONFIG_MAGIC_SYSRQ,以誘導恐慌和測試這個功能。

  1. 現在,我們需要創建一個MTD分區(/ dev/Oops)來存儲恐慌痕跡。可以通過修改內核源代碼中定義的內存佈局和分區信息來對MTD進行分區,其格式爲arch ///。c。另外,您需要注意,作爲內核命令行一部分傳遞的分區信息將會覆蓋board.c更改。
{ 
.name = "loader", 
.size = 0x000E0000, 
.offset = MTDPART_OFS_APPEND 
}, 
{ 
.name = "kernel", 
.size = 0x002A0000, 
.offset = MTDPART_OFS_APPEND 
}, 
{ 
.name = "oops", 
.size = 0x000E0000, 
.offset = MTDPART_OFS_APPEND 
}, 
{ 
.name = "all", 
.size = MTDPART_SIZ_FULL, 
.offset = 0x00000000 
}, 
  • 生成內核和mtdoops.ko將得到構建爲根文件系統的一部分。安裝文件系統並確保分區已創建。
  • cat /proc/mtd 
    dev: size erasesize name 
    mtd0: 000e0000 00020000 "loader" 
    mtd1: 002a0000 00020000 "kernel" 
    mtd3: 000e0000 00020000 "Oops" 
    mtd5: 08000000 00020000 "all" 
    
  • 現在,觸發使用魔術鍵恐慌和在糟糕分區觀察內核恐慌日誌。
  • 0

    非常感謝您的詳細步驟。一切似乎都很好,除了設備名稱。當我將設備名稱設置爲「/ dev/oops」時,mtdoops未連接到引導消息中的任何設備。經過一定程度的調試後,我發現設備名稱應該只是「oops」或「分區號」,即(如果你的oops分區是mtd9,只需給出「9」作爲分區號)。改變它後,它開始工作。我能夠使用sp-oops-extract查看日誌。