2017.1-2018.2:Zynq UltraScale + MPSoC:POR上重启JFFS2文件系统的Linux内核恐慌或重启

问题描述

在2017.x和2018.x版本中,当您在ZCU102板上使用JFFS2文件系统启动Linux时,它会在POR或重启周期内因内核崩溃而崩溃。

如果您擦除JFFS2分区,然后第一次成功引导,则在POR或重新引导的下一个引导周期中,它会因内核崩溃错误而崩溃。

有关更多详细信息,请参阅附加的引导日志。

[4.916930] ALSA器件列表:
[4.919837]#0:DisplayPort监视器
[5.043030]随机:crng init完成
[5.460283] [drm]找不到任何crtc或尺寸
[5.690018] jffs2:错误:(1)jffs2_link_node_ref:在上一个(0x007ce000-0x007ce000)之后不立即添加新的ref ffffffc87a0276a0(0x007ce000-0x007ce070)
[5.704654] ------------ [cut here] ------------
[5.709221]内核BUG在/kernel-source//fs/jffs2/nodelist.c:622!
[5.715386]内部错误:糟糕 - BUG:0 [#1] SMP
[5.720159]以下链接的模块:
[5.723199] CPU:0 PID:1 Comm:swapper / 0未受污染4.14.0-xilinx-v2018.1#1
[5.730404]硬件名称:ZynqMP ZCU102 Rev1.0(DT)
[5.735350]任务:ffffffc87b846d00 task.stack:ffffff8008038000
[5.741261] PC位于jffs2_link_node_ref + 0x1c0 / 0x1c8
[5.746203] LR位于jffs2_link_node_ref + 0x1c0 / 0x1c8
[5.751150] pc:[<ffffff80082e67e0>] lr:[<ffffff80082e67e0>] pstate:60000045
[5.758530] sp:ffffff800803b870
[5.761826] x29:ffffff800803b870 x28:0000000000000000
[5.767122] x27:ffffffc87b04aada x26:0000000000000000
[5.772417] x25:000000000000e002 x24:000000000000e002
[5.777712] x23:ffffffc87b04aaa8 x22:ffffff8008e73218
[5.783008] x21:0000000000000070 x20:ffffff800c93e8f8
[5.788303] x19:ffffffc87a0276a0 x18:0000000000000010
[5.793598] x17:0000000000001800 x16:0000000000001400
[5.798894] x15:ffffffffffffffff x14:0720072007200720
[5.804189] x13:0720072007200720 x12:0720072007200720
[5.809484] x11:0720072007200720 x10:0720072007200720
[5.814780] x9:0720072007200720 x8:0720072007200720
[5.820075] x7:0720072007200720 x6:000000000000019b
[5.825370] x5:ffffff800849d3b8 x4:0000000000000000
[5.830665] x3:0000000000000000 x2:ffffffffffffffff
[5.835961] x1:ffffff8008dbce68 x0:0000000000000098
[5.841257]进程交换器/ 0(pid:1,堆栈限制= 0xffffff8008038000)
[5.847941]通话记录:
[5.850372]异常堆栈(0xffffff800803b730至0xffffff800803b870)
[5.856797] b720:0000000000000098 ffffff8008dbce68
[5.864612] b740:ffffffffffffffff 0000000000000000 0000000000000000 ffffff800849d3b8
[5.872425] b760:000000000000019b 0720072007200720 0720072007200720 0720072007200720
[5.880238] b780:0720072007200720 0720072007200720 0720072007200720 0720072007200720
[5.888051] b7a0:0720072007200720 fffffffffffffffff 0000000000001400 0000000000001800
[5.895863] b7c0:0000000000000010 ffffffc87a0276a0 ffffff800c93e8f8 0000000000000070
[5.903676] b7e0:ffffff8008e73218 ffffffc87b04aaa8 000000000000e002 000000000000e002
[5.911489] b800:0000000000000000 ffffffc87b04aada 0000000000000000 ffffff800803b870
[5.919302] b820:ffffff80082e67e0 ffffff800803b870 ffffff80082e67e0 0000000060000045
[5.927115] b840:ffffff8008a5f998 ffffffc87a0276a0 fffffffffffffffff 00000000007ce070
[5.934926] b860:ffffff800803b870 ffffff80082e67e0
[5.939788] [<ffffff80082e67e0>] jffs2_link_node_ref + 0x1c0 / 0x1c8
[5.945778] [<ffffff80082f778c>] sum_link_node_ref + 0x64 / 0x78
[5.951420] [<ffffff80082f8224>] jffs2_sum_scan_sumnode + 0x31c / 0x6b8
[5.957671] [<ffffff80082eb6c8>] jffs2_scan_eraseblock + 0x3e0 / 0x1198
[5.963920] [<ffffff80082ec604>] jffs2_scan_medium + 0x184 / 0x4d0
[5.969735] [<ffffff80082eea3c>] jffs2_do_mount_fs + 0x17c / 0x728
[5.975552] [<ffffff80082f0e5c>] jffs2_do_fill_super + 0xec / 0x270
[5.981455] [<ffffff80082f1630>] jffs2_fill_super + 0x108 / 0x140
[5.987185] [<ffffff80085ea000>] mount_mtd_aux.isra.0 + 0x60 / 0x100
[5.993174] [<ffffff80085ea1d4>] mount_mtd + 0x134 / 0x1a8
[5.998295] [<ffffff80082f1114>] jffs2_mount + 0x14 / 0x20
[6.003418] [<ffffff800819eb98>] mount_fs + 0x18 / 0xa8
[6.008280] [<ffffff80081bd5cc>] vfs_kern_mount.part.7 + 0x4c / 0x120
[6.014356] [<ffffff80081c00b0>] do_mount + 0x4b8 / 0xc20
[6.019390] [<ffffff80081c0be0>] SyS_mount + 0x68 / 0x108
[6.024426] [<ffffff8008d210a0>] mount_block_root + 0x124 / 0x27c
[6.030154] [<ffffff8008d214e0>] prepare_namespace + 0x98 / 0x1b4
[6.035883] [<ffffff8008d20d44>] kernel_init_freeable + 0x1b8 / 0x1d8
[6.041963] [<ffffff8008a1c560>] kernel_init + 0x10 / 0x100
[6.047170] [<ffffff8008084a90>] ret_from_fork + 0x10 / 0x18
[6.052465]代码:0b150085 0b0000c7 91302100 97f7d32f(d4210000)
[6.058541] --- [结束追踪aa92c78c5b1c894d] ---
[6.063187]内核恐慌 - 未同步:尝试杀死init!退出码= 0x0000000b
[6.063187]
[6.072261] SMP:停止辅助CPU
[6.076222]内核偏移:已禁用
[6.079634] CPU功能:0x002004
[6.083018]内存限制:无
[6.086058] --- [结束内核恐慌 - 不同步:试图杀死init!退出码= 0x0000000b
[6.086058]

解决/修复方法

要在内核中修复此问题,请从menuconfig中禁用CONFIG_JFFS2_SUMMARY,如下所示:

 $ petalinux-config -c kernel 

然后禁用以下内核配置:

文件系统--->杂项文件系统---> [] JFFS2摘要支持

默认情况下,这在xilinx_zynqmp_defconfig中启用

因此,当mtd_writev()返回0的长度时(即使节点空间未保留为脏但重新使用),额外的摘要条目将指向下一个节点的空间。

附件

相关附件

名称文件大小文件类型
JFFS2内核恐慌-log.txt的 160 KB 文本
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-08-26 22:41:14 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它