繁体   English   中英

Mips Linux:将内核Panic记录到mtd分区中

[英]Mips Linux: Logging Kernel Panic into mtd partition

我们在基于MIPS的嵌入式设备领域遇到内核恐慌。 如何在MTD分区中记录内核恐慌跟踪? 我们是否必须仅将跟踪写入MTD还是可以覆盖NFS? 谁能解释一下在出现紧急情况之后,如何获得有用的内核跟踪。

您可以在内核中打开mtdoops模块,并将内核恐慌跟踪记录到mtd分区上。 我认为我们无法在NFS上写出恐慌痕迹。 但是,您可能需要探索有关ramoop的知识。

以下是配置内核以捕获mtd闪存上的内核oops的步骤。 内核崩溃后捕获堆栈跟踪信息对于调试内核问题(特别是在现场发生的问题)非常有用。 在mtdoops模块初始化期间,会将mtd分区转换为循环缓冲区并事先擦除。

  1. 内核标志CONFIG_MTD_OOPS将内核配置为将oops堆栈跟踪写入MTD分区。 该MTD开发人员分区信息可以在mtdoops模块中进行硬编码,也可以动态指定。 该组件可以作为内核的一部分或作为单独的模块构建。 在构建内核之前,您需要确保您的mtd设备已经注册了panic_write处理程序。 记住,普通的mtd写入处理程序还不够,因为我们必须在内核崩溃后写入mtd内存。 如果mtd设备没有自己的紧急写入处理程序,请运行补丁。

    当作为内核的一部分CONFIG_MTD_OOPS = y构建时,需要使用闪存分区信息(mtddev)修补mtdoops模块。

 --- ./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 / oops

除了启用MTP OOPS标志外,还要配置CONFIG_MAGIC_SYSRQ,以引起恐慌并测试此功能。

  1. 现在,我们需要创建一个MTD分区(/ dev / Oops)以存储紧急跟踪。 可以通过修改arch ///。c内核源中定义的内存布局和分区信息来对MTD进行分区。 另外,您还需要注意,作为内核命令行的一部分传递的分区信息将覆盖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 }, 
  1. 构建内核,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" 
  1. 现在,使用Magic SysRq键触发紧急情况,并观察Oops分区中的内核紧急情况日志。

非常感谢您的详细步骤。 除了设备名称,其他一切似乎都很好。 当我将设备名称指定为“ / dev / oops”时,mtdoops不会在启动消息中附加到任何设备。 经过一定程度的调试后,我发现设备名称应为“ oops”或“分区号”,即(如果您的oops分区为mtd9,则只需输入“ 9”作为分区号)。 更改后,它开始工作。 我可以使用sp-oops-extract查看日志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM