尝试升级 kernel 到 4.4.12版本,然后出现 kernel 加载 ubi 文件系统失败的现象,现象如下
[ 3.152220] ubi0 error: vtbl_check: too large reserved_pebs 1908, good PEBs 1860 [ 3.160054] ubi0 error: vtbl_check: volume table check failed: record 0, error 9
经过查找,是因为 ubi 文件系统制作过大的原因。
// 修改制作文件系统的脚本 // mkubiimg.sh #sudo ./mkfs.ubifs -q -r rootfs -m 2048 -e 126976 -c 2047 -o ubifs.img -F sudo mkfs.ubifs -q -r rootfs_release -m 2048 -e 126976 -c 1600 -o ubifs.img -F echo mkfs.ubifs over! sudo ubinize -o ubi.img -m 2048 -p 128KiB ubinize.cfg echo ubinize over! sync sudo cp ubi.img ~/image -rf sudo rm ubifs.img ubi.img -rf sync echo make file system ok ! // vim ubinize.cfg [ubifs] mode=ubi image=ubifs.img vol_id=0 vol_size=200MiB vol_type=dynamic vol_name=rootfs vol_flags=autoresize
参考资料:http://www.cnblogs.com/zengjfgit/p/4963986.html
mkfs.ubifs 参数: -F:file-system free space has to be fixed up on first mount -q:未知 -r:build file system from directory DIR -m:最小输入输出大小为2KiB(2048bytes),一般为页大小 -e:逻辑可擦除块大小为124KiB=(每块的页数-2)*页大小=(64-2)*2KiB=124KiB=126976bytes -c:最多逻辑可擦除块数目为1600, 这个值是通过 ubinize.cfg 里面的 vol_size=200MiB算出来的, 200M * 1024 / 128K 算出来的。 ubinize 参数: -o:输出文件名 -m:最小输入输出大小为2KiB(2048bytes),一般为页大小 -p:物理可擦出块大小为128KiB=每块的页数*页大小=64*2KiB=128KiB -s:用于UBI头部信息的最小输入输出单元,一般与最小输入输出单元(-m参数)大小一样。