#!/bin/bash
#Author:allen.zhang
#Date: 20211218
# This variable will be populated during installation
SCRIPT_PATH=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P)
# The following variables are populated during the SDK build
# -F:space fixup标志,会在第一次挂载文件系统时触发内核中的“空闲空间修复”过程,可以避免一些"ECC"错误,比如文件系统满了的时候
#MKUBIFS_ARGS="-F -m 2048 -e 126976 -c 1540"
MKUBIFS_ARGS="-F -m 2048 -e 126976"
UBINIZE_ARGS="-m 2048 -p 128KiB -s 512 -O 2048"
name=$1
part_size=$2
image_rootfs="${SCRIPT_PATH}/${name}"
image_name="${SCRIPT_PATH}/${name}"
#计算maximum LEBS, maxleb过大会导致journal size过大,可用空间变少
#maxleb = part_size / leb-size
maxleb=$((part_size*1048576/126976 + 1))
echo “The maximum logical erase block count is $maxleb”
#计算vol_size, 在设置了autoresize时,vol_size表示volume最小大小。当然这只是volume大小,实际fs大小比这个值小。
#vol_size = part_size - overhead_size
#overhead_size = (B - BB + 4) * SP + O * (P - B - 4). 参考:http://linux-mtd.infradead.org/doc/ubi.html#L_overhead
vol_size=$(((part_size*1048576 - part_size*1048576/32 - 5586944)/1048576))
if [ $vol_size -lt $((part_size*4/5)) ]
then
echo "The volume size(${vol_size}MiB) is less than 80% of the physical size of the MTD partition(${part_size}MiB)."
vol_size=$((part_size*4/5))
echo "Force to 80%(${vol_size}MiB), which may be reduced the number of PEBs reserved for bad PEB handling."
fi
echo "The volume size is ${vol_size}MiB"
create_ubinize_cfg() {
cat >> "${image_name}.ubinize.cfg" << __EOF__
[ubifs]
mode=ubi
image=${image_name}.ubifs
vol_id=0
vol_size=${vol_size}MiB
vol_type=dynamic
vol_name=${name}
vol_flags=autoresize
__EOF__
}
mkfs.ubifs -v -r "${image_rootfs}" -o "${image_name}.ubifs" ${MKUBIFS_ARGS} -c $maxleb
if [ $? -ne 0 ]
then
echo ""
echo "Error: mkfs.ubifs failed!"
exit 1
fi
create_ubinize_cfg
ubinize -v -o "${image_name}.ubi" ${UBINIZE_ARGS} "${image_name}.ubinize.cfg"
if [ $? -ne 0 ]
then
echo ""
echo "Error: ubinize failed!"
exit 1
fi
echo ""
echo "Success! The UBI image is available at \"${image_name}.ubi\""
echo ""
exit 0
if [ -f "${image_name}.ubi" ]; then
echo "@@@@@@@@@@@ make ubi.img OK"
else
echo "@@@@@@@@@@@ make ubi.img failed!!"
fi
参考:
http://linux-mtd.infradead.org/doc/ubi.html
http://linux-mtd.infradead.org/doc/ubifs.html
http://linux-mtd.infradead.org/faq/ubi.html
http://linux-mtd.infradead.org/faq/ubifs.html