0

在特定情况下,我使用 NOR + NAND 配置,在 NOR 上使用 U-Boot,在 NAND 上使用 ubi 映像(内核 + fs)。

U-boot(2016)第一次可以读取UBI镜像并成功加载内核,没有任何错误如下。

ubi0: attaching mtd2
ubi0: attached mtd2 (name "mtd=0", size 32 MiB)
ubi0: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
ubi0: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
ubi0: VID header offset: 2048 (aligned 2048), data offset: 4096
ubi0: good PEBs: 256, bad PEBs: 0, corrupted PEBs: 0
ubi0: user volume: 3, internal volumes: 1, max. volumes count: 128
ubi0: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 191496598
ubi0: available PEBs: 134, total reserved PEBs: 122, PEBs reserved for bad PEB handling: 20
Read 0 bytes from volume kernel to 84000000
No size specified -> Using max size (2793472)
## Loading kernel from FIT Image at 84000000 ...

但是当尝试重新启动时,下一次我会遇到如下 UBI 错误。

ubi0: attaching mtd2
ubi0: scanning is finished
UBI error: cannot attach mtd2
UBI init error 22

似乎在第一次读取 UBI 时,U-Boot 会在 UBI 标头或其他内容中进行一些标记或更改,但我无法清楚地找到导致此问题的原因以及我应该查看 u-boot 代码的哪一部分.

4

1 回答 1

0

确保内核和 uboot 的 UBI 配置相同。在两个环境中运行 ubinfo 并一一检查每个信息。

一个可能的错误是PEB号,内核会保留2%(20/1024)块,但是uboot只保留1%(CONFIG_MTD_UBI_BEB_RESERVE 1)

还要确保内核和 U-Boot 具有相同的 NAND-ECC 方案。

于 2017-05-30T11:12:57.040 回答