在一个特定的场景中,我使用NOR + NAND配置,在NOR上使用U-Boot,在NAND上使用ubi镜像(kernel+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代码的哪一部分。
发布于 2017-05-30 11:12:57
确保内核和uboot的UBI配置相同。在两个环境中运行ubinfo并逐个检查每个信息。
可能的错误是PEB编号,内核将保留2% (20/1024)的块,但uboot仅保留1% (CONFIG_MTD_UBI_BEB_RESERVE 1)
还要确保两个Kernel e- U-Boot都有相同的NAND-ECC方案。
https://stackoverflow.com/questions/39252078
复制