linux内核启动时报错ubi0 error: validate_ec_hdr: bad VID header offset 256, expected 64

1.详细错误报告如下:


ubi0 error: validate_ec_hdr: bad VID header offset 256, expected 64


ubi0 error: validate_ec_hdr: bad EC header


ubi0 error: ubi_io_read_ec_hdr: validation failed for PEB 0


2. 为什么会出现这种情况?


由于给ubinize传递的参数有误


3.解决方法


给ubinize传递正确的参数,需要指定的参数有逻辑擦除块大小,最大物理擦除块数目,最小输入输出单元的大小(有可能需要指定subpage大小,这与使用的flash有关,只有支持subpage的nand flash才需要指定这一参数)


举例:


指定使用的根文件系统大小为32MiB (这个根文件系统是使用的ubifs),当前使用的flash为nor flash,从该flash的手册中获知:物理擦除块大小为128KiB,页面大小为256字节.


3.1 最小输入输出单元的大小是多少?


由于当前使用的是nor flash,那么最小输入输出单元的大小为1 (如果使用的是nand flash,那么这个大小就是页面大小)


3.2 最大物理擦除块数目如何计算?


最大物理擦除块数目=根文件系统大小/物理擦除块大小


由于当前指定ubi文件系统大小为32MiB,那么32MiB/128KiB=256


3.3 逻辑擦除块大小如何计算?


逻辑擦除块大小=物理擦除块大小-EC头结构体大小-VID头结构体大小 (EC头和VID头是ubi中的概念,这两个结构体描述逻辑擦除块的相关信息;这是nor flash中的逻辑擦除块的计算方法,那么nand flash的逻辑擦除块大小如何计算呢?请看拓展)


那么128KiB-64B-64B=130944


4.拓展


4.1 nand flash的逻辑擦除块大小如何计算呢?


一个物理擦除块包含的页面数=物理擦除块大小/页面大小


逻辑擦除块大小=(一个物理擦除块包含的页面数-2)* 页面大小=物理擦除块大小-(2*页面大小)


5.参考资料


ubi相关问题