制作ubifs和ubi镜像

#!/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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值