1

我在 SLC NAND 上有一个带有 u-boot 和 UBIFS 分区的工作系统。

我通过读取它占用的整个块范围(包括备用区域)将 UBIFS 分区复制到二进制映像文件中。

我可以成功地将此映像编程到另一个 NAND 设备(跳过空白页)并挂载它,从而复制分区。但是,如果新的 NAND 设备中有坏块,我不知道正确的操作是什么?

当我尝试跳过坏块(在编程期间)时,这似乎是最合理的解决方案,从 u-boot 挂载失败!UBIFS 挂载过程不能识别一个坏块被跳过了吗?还有其他简单的解决方案吗?

4

1 回答 1

1

找到了工作方法!

这样做的全部目的是找到一个简单的算法来编程 NAND 闪存部件,然后再将其焊接到电路板上。

这是由编程机器在大规模生产期间完成的,没有办法使用 Linux 来做到这一点。由于NAND部分是新的,不需要磨损均衡信息,但是它可能有0到任意数量的坏块,随机分布在分区区域。唯一可用的步骤是:

  • 跳过坏块
  • 擦除

为批量生产准备图像:

  • 确保 UBI 卷小于 MTD 分区(例如,小 5%)
  • 创建 UBI 卷和 UBIFS,并填充它。
  • 将 NAND 块 + 页面的备用区域转储到二进制文件中。

使用 mkfs 和其他工具准备 UBIFS 是可能的,但是您需要添加 ECC 信息,编程机器可能无法即时计算,有时只是不具备相关知识。

编程算法如下:

  • 从 MTD 分区偏移量开始,将每个图像块编程为 NAND 块。
  • 如果 NAND 块坏跳过它,将图像块 N 编程到 NAND 块 N+1。
  • 如果图像块是空的,不要编程,在图像和NAND芯片上都前进到下一个块。
  • 继续以相同的方式直到 UBI 卷的最后一个块。
  • 在 NAND 芯片上 MTD 分区的最后一个好块上编程最后一个图像块。

希望对任何人都有帮助:-)

于 2014-10-08T07:11:54.007 回答