我们在基于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. Elastix核心恐慌
- 3. os.walk创建一个内核恐慌
- 4. 使用struct导致内核恐慌?
- 5. Raspbian Wheezy:树莓派内核恐慌
- 6. 导致内核恐慌的PHP APC
- 7. 内核恐慌似乎是无关
- 8. 在ZC706上引导linux-3.14.41:内核恐慌
- 9. 转到恐慌
- 10. 像Mac OS内核的UIview动画内核恐慌
- 11. 收到EOF恐慌错误
- 12. 将恐慌重定向到指定的缓冲区
- 13. 增加flyweight恐慌
- 14. 新项目恐慌
- 15. 恐慌,并从包
- 16. malloc内核恐慌,而不是返回NULL
- 17. 这些内核恐慌错误是什么意思?
- 18. Ubuntu OpenVZ启动时出现内核恐慌错误
- 19. 结束内核恐慌 - 不同步:VFS:无法未知块
- 20. 内核恐慌当杀死节点js - 帮我找出
- 21. iPad内核恐慌,我如何解释崩溃报告?
- 22. 的std ::结果::结果恐慌登录
- 23. 恐慌与JSON在去
- 24. Golang Revel Assertf导致恐慌
- 25. 类型断言恐慌
- 26. 主和测试从恐慌中恢复之间的区别?
- 27. 内核线程在内核地址空间中的任意读取是否会引起恐慌?
- 28. 延期功能是否可以恐慌,特别是当它已经恐慌?
- 29. ghci中给GHC恐慌调用
- 30. PintOS,核心恐慌与-v选项bochs在Ubuntu上