我們在基於MIPS的嵌入式設備領域遇到了內核恐慌。如何在MTD分區中記錄內核恐慌痕跡?我們是否必須將跟蹤寫入MTD,還是可以寫入NFS?任何人都可以解釋如何在遠程盒子的恐慌之後獲得有用的內核痕跡。Mips Linux:將內核恐慌記錄到mtd分區中
回答
您可以打開內核中的mtdoops模塊並將內核恐慌記錄記錄到mtd分區上。我不認爲我們可以通過NFS編寫恐慌追蹤。不過,你可能想探索一下ramoops。
以下是配置內核捕獲內核oops到mtd閃存的步驟。在內核恐慌之後捕獲堆棧跟蹤對於調試內核問題特別是在現場發生的問題是無價的。在mtdoops模塊初始化過程中,mtd分區會變成循環緩衝區並被預先擦除。
內核標誌,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,以誘導恐慌和測試這個功能。
- 現在,我們需要創建一個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"
非常感謝您的詳細步驟。一切似乎都很好,除了設備名稱。當我將設備名稱設置爲「/ dev/oops」時,mtdoops未連接到引導消息中的任何設備。經過一定程度的調試後,我發現設備名稱應該只是「oops」或「分區號」,即(如果你的oops分區是mtd9,只需給出「9」作爲分區號)。改變它後,它開始工作。我能夠使用sp-oops-extract查看日誌。
- 1. 調用Mac內核恐慌?
- 2. Netlink給內核恐慌
- 3. vfs_write引起內核恐慌
- 4. Elastix核心恐慌
- 5. RetrieveINQUIRYData中的偶爾OSX內核恐慌()
- 6. com.apple.iokit.CHUDKernLib內核恐慌修復程序
- 7. Raspbian Wheezy:樹莓派內核恐慌
- 8. 導致內核恐慌的PHP APC
- 9. os.walk創建一個內核恐慌
- 10. 使用struct導致內核恐慌?
- 11. 內核恐慌似乎是無關
- 12. Linux內核恐慌。瞭解oops消息 - pgd?
- 13. 在ZC706上引導linux-3.14.41:內核恐慌
- 14. 轉到恐慌
- 15. 像Mac OS內核的UIview動畫內核恐慌
- 16. 內核恐慌 - 不同步:中斷時發生致命異常
- 17. Kdump不會在內核恐慌中執行
- 18. 收到EOF恐慌錯誤
- 19. 問號'?'的含義是什麼?在Linux內核恐慌調用跟蹤?
- 20. 將恐慌重定向到指定的緩衝區
- 21. 新項目恐慌
- 22. 恐慌,並從包
- 23. shopify - 貝寶恐慌
- 24. 增加flyweight恐慌
- 25. 恐慌而rmmod的
- 26. Ubuntu OpenVZ啓動時出現內核恐慌錯誤
- 27. 內核恐慌當殺死節點js - 幫我找出
- 28. malloc內核恐慌,而不是返回NULL
- 29. OS X內核恐慌診斷。如何翻譯回溯地址
- 30. 這些內核恐慌錯誤是什麼意思?