u-boot如何标记坏块

u-boot如何标记坏块

在基于 Arm 的板 (wb45n) 中的 U-boot 中,我手动擦除然后将一个块标记为坏块。

U-Boot> nand 擦除 0x00720000 20000

NAND 擦除:设备 0 偏移量 0x00720000,大小 0x20000
在 0x720000 处擦除——100% 完成。
OK
U-Boot> nand markbad 0x00720000
块 0x00720000 成功标记为坏
U-Boot> nand bad
>
设备 0 坏块:
00720000

我编写软件,可以看到在此过程中跳过了坏块。

NAND写入:设备0偏移0x5e0000,大小0x16c0000
跳过坏块0x00720000
23855104字节写入:OK

软件写入后,我重新启动,坏块就没有了。

U-Boot> nand bad
>
设备 0 坏块:
U-Boot>

似乎它们已经被自动纠正了。如果我在将块标记为坏块之前不擦除这些块,我可以成功编写软件,但我(经常但并非总是)在内核启动期间收到以下错误:(我真的不知道为什么会产生此错误消息,任何欢迎解释)

UBI 错误:scan_peb:PEB 175 中的错误图像序列号 1748114077,预期为 1578922167

擦除计数器标头转储:

    magic          0x55424923
    version        1
    ec             1
    vid_hdr_offset 2048
    data_offset    4096
    image_seq      1748114077
    hdr_crc        0x285278f

启动内核...

解压缩 Linux...完成,启动内核。

添加到擦除:PEB 0,EC 0 UBI 错误:ubi_compare_lebs:不支持的闪存 UBI 格式
UBI 错误:ubi_attach_mtd_dev:无法附加 mtd6,错误 -22
UBI 错误:ubi_init:无法附加 mtd6
UBIFS 错误(pid 1):ubifs_mount:无法打开“ubi0:rootfs”,错误 -19
内核恐慌 - 未同步:VFS:无法在未知块(0,0)上挂载 root fs

我想做的是测试主板,看看它在失败之前可以处理多少个坏块。

我标记坏块的方式正确吗?
为什么坏块会消失?
有没有办法标记会持续存在的坏块?
最后一个错误是什么意思?

答案1

https://community.nxp.com/thread/334536#comment-453692

该错误与板子闪烁的一个问题有关,即:

  1. 您错误地刷新了新图像 - 您没有删除所有的闪光

  2. 您刷新了一个新图像 - 通过仅擦除您写入的擦除块,但不擦除擦除块的其余部分。

我可以想象如果

  • 你省略了你的nand erase
  • 您在 NAND 上写入了一个带有 N 个标记为坏块的映像,然后随后写入了相同的映像,但在 NAND 上写入了 N-1 个标记为坏块的映像。当前图像结束后,前一个图像的末尾会留下 1 个块,该块不会被覆盖。

相关内容