在特定情况下,我使用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代码的哪一部分应该我调查一下。
答案 0 :(得分:0)
确保内核和uboot的UBI配置相同。在两个环境中运行ubinfo并逐个检查每个信息。
可能的错误是PEB编号,内核将保留2%(20/1024)块,但uboot仅保留1%(CONFIG_MTD_UBI_BEB_RESERVE 1)
还要确保内核和U-Boot都具有相同的NAND-ECC方案。