嵌入式Linux系统启动时,YAFFS2文件系统坏块问题

硬件介绍:
处理器 MPC8377A,基于PowerPC
问题:
开发板文档介绍启动流程时,其中三步是如下所述:
6. Linux操作系统启动后,自动执行脚本/etc/rc.d/rc.local
7. 脚本/etc/rc.d/rc.local 挂接了/myapp 为JFFS2 文件系统和/mynand 为YAFFS2 文件系统后,
执行/myap/myapp.sh 启动脚本。
8. 至此,系统启动完成。
通过串口打印出的消息看,当进行到第7步时,挂载/myapp没问题,但挂载/mynand时出现了问题。其中/mynand对应的硬件是256M的nand flash。问题消息如下:
Now Mount yaffs2 file system
yaffs: dev is 32505859 name is "mtdblock3"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.3, "mtdblock3"
Machine check in kernel mode.
Caused by (from SRR1=49030): Transfer error ack signal
Oops: Machine check, sig: 7 [#1]
MPC837x RDB
Modules linked in:
NIP: c000f654 LR: c020a720 CTR: 00000009
REGS: dfac9c70 TRAP: 0200 Not tainted (2.6.25)
MSR: 00049030 <EE,ME,IR,DR> CR: 22000044 XER: 00000000
TASK = deadb420[1441] 'jffs2_gcd_mtd1' THREAD: dfac8000
GPR00: ff00ff00 dfac9d20 deadb420 deb08e60 e20eea78 00000028 00000028 00000000
GPR08: 00d6ea78 00000009 00000000 00d6ea9f 22000088 100a4348 c033b8dc c033b84c
GPR16: c033b890 c033b56c dfac9d38 dfac9dc8 deb289f8 deb08e88 00000000 deb289c0
GPR24: 00000028 00000001 deb28a34 c03b6e2c 00d6ea78 00000028 00000000 00d6ea78
NIP [c000f654] _memcpy_fromio+0x78/0xc4
LR [c020a720] simple_map_copy_from+0x50/0x60
Call Trace:
[dfac9d20] [00000028] 0x28 (unreliable)
[dfac9d30] [c0208724] cfi_amdstd_read+0x90/0x1a0
[dfac9d80] [c0201074] part_read+0x5c/0xe4
[dfac9d90] [c0150b5c] jffs2_flash_read+0x180/0x258
[dfac9dc0] [c014723c] jffs2_get_inode_nodes+0x14c/0xd74
[dfac9e20] [c0147eac] jffs2_do_read_inode_internal+0x48/0x84c
[dfac9e90] [c014870c] jffs2_do_crccheck_inode+0x5c/0xb8
[dfac9f00] [c014cbd0] jffs2_garbage_collect_pass+0x1b0/0x798
[dfac9f50] [c014e794] jffs2_garbage_collect_thread+0x9c/0x118
[dfac9ff0] [c000fb3c] kernel_thread+0x44/0x60
Instruction dump:
4e800020 2b850004 409d0040 3805fffc 3925fffb 2b800001 5529f0be 39290001
7d2903a6 419c004c 80040000 90030000 <7c0006ac> 38840004 38630004 38a5fffc
---[ end trace f91a5d41545543cf ]---
block 129 is bad
block 130 is bad
block 190 is bad
block 676 is bad
block 700 is bad
之后就一直显示block XXX is bad,等了半小时也没进系统。
网上介绍说是YAFFS2文件系统的坏块问题,但应该如何处理此问题呢?
由于是新手,恳请各位能给予一些指导。

第1个回答  2013-03-04
文件系统坏块?是nand flash芯片硬件问题还是烧写的文件系统软件问题?
可尝试一下几种解决思路:
1.尝试同样的文件系统从外部(如sd卡)烧写至内存启动(排除软件问题)
2.重新烧写系统到nand flash芯片(遇到坏块应可绕开的吧)
//3.重新编译文件系统

我做的项目是ARM平台+嵌入式linux操作系统,虽然环境不一样但有些原理是相通的,希望可以帮到你。
第2个回答  2013-03-07
跟坏块没关系
首先看一下内核配置支持jffs2 yaffs2
还有两个文件系统制作是否成功
uboot bootarg 参数是否配对

想修复坏区很简单
在u-boot 下
命令 nand scrub
不过u-boot 就没了

坏区不多的话 修复意义不大追问

这块板子的uboot没有在nand flash上,而是在另一块Nor flash上,所以 nand scrub后,Uboot还存在。
实际情况下,nand scrub后,可以进入系统;但重启后,又是停留在检测坏块阶段了。不能每次都用Uboot来nand scrub吧?
现在还有新问题,就是存储uboot的那块nor flash,用erase擦除根文件系统ramdisk区域时,会出现error,擦除出错,当然也不能成功再烧写ramdisk进去了。
我已经联系售后了,看看他们解决吧,多谢了

本回答被提问者采纳
第3个回答  2018-04-09
解决了吗?楼主
相似回答