我们在MIPS嵌入式设备中遇到了内核崩溃的问题。我该如何将内核崩溃跟踪记录在MTD分区中?我们必须将跟踪的内容仅写入MTD中,还是可以通过NFS进行覆盖写入?有人能解释一下如何在远程设备发生内核崩溃后获取有用的内核跟踪信息吗?
--- ./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以引发紧急情况并测试此功能。
{
.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
},
cat /proc/mtd
dev: size erasesize name
mtd0: 000e0000 00020000 "loader"
mtd1: 002a0000 00020000 "kernel"
mtd3: 000e0000 00020000 "Oops"
mtd5: 08000000 00020000 "all"
现在,使用Magic SysRq键触发紧急情况,并观察Oops分区中的内核紧急情况日志。