2

我使用 ubi 文件系统和 mtd 子系统在 NAND 闪存上工作。它工作正常。

但现在我发现以下错误:

UBI 错误:ubi_io_read:从 PEB 2701:8192 读取 516096 字节时出现错误 -74,读取 516096 字节

end_request:I/O 错误,开发 mtdblock5,扇区 49160

我上面提到的那些错误的原因是什么?如何从这些错误中恢复?

4

2 回答 2

4

错误 -74 是EBADMSG. 查看ubi.h我们可以看到,

  • UBI_IO_FF : flash 的读取区域只包含 0xFFs
  • UBI_IO_FF_BITFLIPS : 与 %UBI_IO_FF 相同,但也存在 MTD 驱动程序报告的数据完整性错误(在 NAND 的情况下无法纠正 ECC 错误)
  • UBI_IO_BAD_HDR:EC 或 VID 标头已损坏(坏魔法或 CRC)
  • UBI_IO_BAD_HDR_EBADMSG : 同 %UBI_IO_BAD_HDR,但也有 MTD 驱动报告的数据完整性错误(NAND 情况下不可纠正的 ECC 错误)
  • UBI_IO_BITFLIPS : 位翻转被检测和纠正

每个 UBI 块是一个闪存擦除块(通常为 128K),这些块有两个 UBI 标头,它们是一个页面大小(通常为 2k)。读取此页时,出现错误。无法通过纠错码或 ECC 恢复。

如果您在UbiF之上使用UBI,则应安排对这些块进行折磨。这涉及擦除和重写擦除块。如果多次读取Flash,它可能会过时。这些位可以翻转并要求重新写入数据。事实证明,UBI标头只需要重新编程,flash 就可以了。

如果没有,所有 NAND mtd驱动程序都有一个坏块表。如果数据确实不可恢复,擦除块将在此表中标记为坏,Ubi不应再使用该扇区。

如果错误仍然存​​在,那么这可能是一个问题。但是,在正常使用 NAND 闪存的情况下,这是有些意料之中的。NAND 闪存的典型周期为 1,000 到 100,000。经过一定程度的磨损后,闪光灯可能完全无法使用。这取决于闪存类型、文件系统(和磨损均衡)以及系统上的应用程序。

错误配置的闪存驱动程序可能会导致这些错误。不正确的闪存 ECC 代码可能会导致过早的错误(闪存为 4 位 ECC 提供空间,但驱动程序仅实现 1 位)。也可能是由于应用程序fsync()每隔 1ms-100ms 不断磁盘而导致的;即使所有其他组件都处于最佳状态,这种行为也会在几年内磨损闪光灯。 Ubi应该有一些最好的磨损均衡。如果您经常重新刷新图像,则可以打折ubi磨损平衡并导致此类问题。

于 2013-12-06T16:49:00.953 回答
0

两者都显示与 NAND 闪存损坏或坏块有关的 I/O 错误,尝试使用另一个闪存并使用它。您也可以尝试擦除闪存并重试。

谢谢和问候,
阿洛克·塔克

于 2013-10-24T07:58:05.120 回答