我使用ubi文件系统和mtd子系统在NAND闪存的顶部工作。 它工作正常。
但现在我发现了以下错误:
UBI错误:ubi_io_read:错误-74从PEB 2701读取516096个字节:8192,读取516096个字节
end_request:I / O错误,dev mtdblock5,扇区49160
我上面提到的那些错误的原因是什么? 如何从这些错误中恢复?
答案 0 :(得分:3)
错误-74是EBADMSG
。看看ubi.h,我们可以看到,
每个UBI块都是一个闪存擦除块(典型值为128K),这些块有两个UBI头,它们是一个页面大小(典型值为2k)。阅读此页面时出现错误。通过纠错码或ECC无法恢复。
如果您在 UbiFs 之上使用 UBI ,则应将这些块安排为折磨。这涉及擦除和重写擦除块。如果多次读取,Flash可以陈旧。这些位可以翻转并要求重写数据。可能会发现 UBI 标题只需要重新编程,闪存就可以了。
如果没有,所有NAND mtd 驱动程序都有bad block table。如果数据确实无法恢复,则擦除块将在此表中标记为坏, Ubi 不应再使用此扇区。
如果错误仍然存在,那么这是一个可能的问题。但是,正常使用NAND闪存有点预期。 NAND闪存的典型周期为1,000到100,000。经过一定程度的磨损后,闪光灯可能完全无法使用。这取决于闪存类型,文件系统(和wear leveling)以及系统上的应用程序。
错误配置的闪存驱动程序可能会导致这些错误。闪存的不正确的ECC代码可能导致预先成熟的错误(闪存为4位ECC提供空间,但驱动程序仅实现1位)。它也可能是由于每隔1ms-100ms不断fsync()
磁盘的错误应用程序引起的;这种类型的行为将在几年内磨损闪光灯,即使所有其他组件都是最佳的。 Ubi 应该有一些最好的磨损平衡
可用。如果您经常重新闪存图像,您可以打折 ubi 磨损均衡并导致此类问题。
答案 1 :(得分:0)
两者都显示与您的NAND闪存中的损坏或坏块有关的I / O错误,尝试使用另一个闪存并使用它。您也可以尝试擦除闪存并再次尝试。
谢谢&问候,
Alok Thaker