-
嘗試升級 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
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參數)大小一樣。