mkfirmware.sh/mk-image.sh: Support sizes in KB
mk-image.sh <src_dir> <target_image> <fs_type> <size(M|K)|auto(0)>" Change-Id: I0aa7545c806816a9cc02727c4a2c2f34e7717685 Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
This commit is contained in:
@ -18,7 +18,7 @@ fatal()
|
||||
|
||||
usage()
|
||||
{
|
||||
fatal "Usage: $0 <src_dir> <target_image> <fs_type> [size]"
|
||||
fatal "Usage: $0 <src_dir> <target_image> <fs_type> [size(M|K)|auto(0)]"
|
||||
}
|
||||
|
||||
[ ! $# -lt 3 ] || usage
|
||||
@ -26,7 +26,21 @@ usage()
|
||||
export SRC_DIR=$1
|
||||
export TARGET=$2
|
||||
FS_TYPE=$3
|
||||
SIZE=$4
|
||||
SIZE=${4:-auto}
|
||||
|
||||
case $SIZE in
|
||||
auto)
|
||||
SIZE_KB=0
|
||||
;;
|
||||
*K)
|
||||
SIZE_KB=${SIZE%K}
|
||||
;;
|
||||
*)
|
||||
SIZE_KB=$(( ${SIZE%M} * 1024 )) # default is MB
|
||||
;;
|
||||
esac
|
||||
|
||||
echo $SIZE_KB | grep -vq [^0-9] || usage
|
||||
|
||||
if [ "$FS_TYPE" = "ubi" ]; then
|
||||
UBI_VOL_NAME=${5:-test}
|
||||
@ -81,9 +95,9 @@ check_host_tool()
|
||||
|
||||
mkimage()
|
||||
{
|
||||
echo "Making $TARGET from $SRC_DIR with size(${SIZE}M)"
|
||||
echo "Making $TARGET from $SRC_DIR with size(${SIZE_KB}KB)"
|
||||
rm -rf $TARGET
|
||||
dd of=$TARGET bs=1M seek=$SIZE count=0 2>&1 || fatal "Failed to dd image!"
|
||||
dd of=$TARGET bs=1K seek=$SIZE_KB count=0 2>&1 || fatal "Failed to dd image!"
|
||||
case $FS_TYPE in
|
||||
ext[234])
|
||||
if mke2fs -h 2>&1 | grep -wq "\-d"; then
|
||||
@ -99,8 +113,8 @@ mkimage()
|
||||
msdos|fat|vfat)
|
||||
# Use fat32 by default
|
||||
mkfs.vfat -F 32 $TARGET && \
|
||||
MTOOLS_SKIP_CHECK=1 \
|
||||
mcopy -bspmn -D s -i $TARGET $SRC_DIR/* ::/
|
||||
MTOOLS_SKIP_CHECK=1 \
|
||||
mcopy -bspmn -D s -i $TARGET $SRC_DIR/* ::/
|
||||
;;
|
||||
ntfs)
|
||||
# Enable compression
|
||||
@ -117,7 +131,7 @@ mkimage()
|
||||
mkimage_auto_sized()
|
||||
{
|
||||
tar cf $TEMP $SRC_DIR &>/dev/null
|
||||
SIZE=$(du -m $TEMP|grep -o "^[0-9]*")
|
||||
SIZE_KB=$(du -k $TEMP|grep -o "^[0-9]*")
|
||||
rm -rf $TEMP
|
||||
echo "Making $TARGET from $SRC_DIR (auto sized)"
|
||||
|
||||
@ -125,8 +139,8 @@ mkimage_auto_sized()
|
||||
RETRY=0
|
||||
|
||||
while true;do
|
||||
EXTRA_SIZE=$(($SIZE / 50))
|
||||
SIZE=$(($SIZE + ($EXTRA_SIZE > 4 ? $EXTRA_SIZE : 4)))
|
||||
EXTRA_SIZE=$(($SIZE_KB / 50))
|
||||
SIZE_KB=$(($SIZE_KB + ($EXTRA_SIZE > 4096 ? $EXTRA_SIZE : 4096)))
|
||||
mkimage && break
|
||||
|
||||
RETRY=$[RETRY+1]
|
||||
@ -164,19 +178,13 @@ mk_ubi_image()
|
||||
|
||||
ubifs_lebsize=$(( $UBI_BLOCK_SIZE - 2 * $UBI_PAGE_SIZE ))
|
||||
ubifs_miniosize=$UBI_PAGE_SIZE
|
||||
partition_size=$(( $SIZE ))
|
||||
|
||||
if [ $partition_size -le 0 ]; then
|
||||
echo "Error: ubifs partition MUST set partition size"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
partition_size_str="$(( $partition_size / 1024 / 1024 ))MB"
|
||||
partition_size_str="$(( $SIZE_KB / 1024 ))MB"
|
||||
output_image=${temp_dir}/${UBI_VOL_NAME}_${ubi_page_size_str}_${ubi_block_size_str}_${partition_size_str}.ubi
|
||||
temp_ubifs_image=$BUILDROOT_IMAGE_DIR/${UBI_VOL_NAME}_${ubi_page_size_str}_${ubi_block_size_str}_${partition_size_str}.ubifs
|
||||
temp_ubinize_file=$BUILDROOT_IMAGE_DIR/${UBI_VOL_NAME}_${ubi_page_size_str}_${ubi_block_size_str}_${partition_size_str}_ubinize.cfg
|
||||
|
||||
ubifs_maxlebcnt=$(( $partition_size / $ubifs_lebsize ))
|
||||
ubifs_maxlebcnt=$(( $SIZE_KB * 1024 / $ubifs_lebsize ))
|
||||
|
||||
echo "ubifs_lebsize=$UBI_BLOCK_SIZE"
|
||||
echo "ubifs_miniosize=$UBI_PAGE_SIZE"
|
||||
@ -202,17 +210,16 @@ mk_ubi_image()
|
||||
|
||||
rm -rf $TARGET
|
||||
case $FS_TYPE in
|
||||
squashfs)
|
||||
mksquashfs $SRC_DIR $TARGET -noappend -comp lz4
|
||||
;;
|
||||
ext[234]|msdos|fat|vfat|ntfs)
|
||||
if [ ! "$SIZE" ]; then
|
||||
if [ $SIZE_KB -eq 0 ]; then
|
||||
mkimage_auto_sized
|
||||
else
|
||||
mkimage && echo "Generated $TARGET"
|
||||
fi
|
||||
;;
|
||||
ubi)
|
||||
[ $SIZE_KB -eq 0 ] && fatal "$FS_TYPE: auto size not supported."
|
||||
|
||||
UBI_PAGE_SIZE=2048
|
||||
UBI_BLOCK_SIZE=0x20000
|
||||
mk_ubi_image
|
||||
@ -225,11 +232,16 @@ case $FS_TYPE in
|
||||
UBI_BLOCK_SIZE=0x40000
|
||||
mk_ubi_image
|
||||
;;
|
||||
squashfs)
|
||||
[ $SIZE_KB -eq 0 ] || fatal "$FS_TYPE: fixed size not supported."
|
||||
mksquashfs $SRC_DIR $TARGET -noappend -comp lz4
|
||||
;;
|
||||
jffs2)
|
||||
[ $SIZE_KB -eq 0 ] || fatal "$FS_TYPE: fixed size not supported."
|
||||
mkfs.jffs2 -r $SRC_DIR -o $TARGET 0x10000 --pad=0x400000 -s 0x1000 -n
|
||||
;;
|
||||
*)
|
||||
echo "File system: $FS_TYPE not support."
|
||||
echo "File system: $FS_TYPE not supported."
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
|
||||
@ -58,6 +58,13 @@ if [ ! -d "$TARGET_OUTPUT_DIR" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
partition_size_kb() {
|
||||
PART_NAME=$1
|
||||
PART_STR=$(grep -oE "[^,^:^\(]*\(${PART_NAME}[\)_:][^\)]*\)" $PARAMETER)
|
||||
PART_SIZE=$(echo $PART_STR | grep -oE "^[^@^-]*")
|
||||
echo $(( ${PART_SIZE:-0} / 2 ))
|
||||
}
|
||||
|
||||
# NOT support the grow partition
|
||||
get_partition_size() {
|
||||
echo $PARAMETER
|
||||
@ -233,7 +240,12 @@ then
|
||||
echo "chown -R www-data:www-data $OEM_DIR/www" >> $OEM_FAKEROOT_SCRIPT
|
||||
fi
|
||||
if [ "$RK_OEM_FS_TYPE" = "ubi" ]; then
|
||||
echo "$MKIMAGE $OEM_DIR $ROCKDEV/oem.img $RK_OEM_FS_TYPE ${RK_OEM_PARTITION_SIZE:-$oem_part_size_bytes} oem $RK_UBI_PAGE_SIZE $RK_UBI_BLOCK_SIZE" >> $OEM_FAKEROOT_SCRIPT
|
||||
if [ -n "$RK_OEM_PARTITION_SIZE" ]; then
|
||||
SIZE_KB=$(( $RK_OEM_PARTITION_SIZE / 1024 ))
|
||||
else
|
||||
SIZE_KB=$(partition_size_kb oem)
|
||||
fi
|
||||
echo "$MKIMAGE $OEM_DIR $ROCKDEV/oem.img $RK_OEM_FS_TYPE ${SIZE_KB}K oem $RK_UBI_PAGE_SIZE $RK_UBI_BLOCK_SIZE" >> $OEM_FAKEROOT_SCRIPT
|
||||
else
|
||||
echo "$MKIMAGE $OEM_DIR $ROCKDEV/oem.img $RK_OEM_FS_TYPE" >> $OEM_FAKEROOT_SCRIPT
|
||||
fi
|
||||
@ -256,7 +268,12 @@ then
|
||||
echo "#!/bin/sh" > $USERDATA_FAKEROOT_SCRIPT
|
||||
echo "set -e" >> $USERDATA_FAKEROOT_SCRIPT
|
||||
if [ "$RK_USERDATA_FS_TYPE" = "ubi" ]; then
|
||||
echo "$MKIMAGE $USER_DATA_DIR $ROCKDEV/userdata.img $RK_USERDATA_FS_TYPE $RK_USERDATA_PARTITION_SIZE userdata $RK_UBI_PAGE_SIZE $RK_UBI_BLOCK_SIZE" >> $USERDATA_FAKEROOT_SCRIPT
|
||||
if [ -n "$RK_USERDATA_PARTITION_SIZE" ]; then
|
||||
SIZE_KB=$(( $RK_USERDATA_PARTITION_SIZE / 1024 ))
|
||||
else
|
||||
SIZE_KB=$(partition_size_kb userdata)
|
||||
fi
|
||||
echo "$MKIMAGE $USER_DATA_DIR $ROCKDEV/userdata.img $RK_USERDATA_FS_TYPE ${SIZE_KB}K userdata $RK_UBI_PAGE_SIZE $RK_UBI_BLOCK_SIZE" >> $USERDATA_FAKEROOT_SCRIPT
|
||||
else
|
||||
echo "$MKIMAGE $USER_DATA_DIR $ROCKDEV/userdata.img $RK_USERDATA_FS_TYPE" >> $USERDATA_FAKEROOT_SCRIPT
|
||||
fi
|
||||
|
||||
@ -8,8 +8,10 @@ RK_LEGACY_PARTITIONS=" \
|
||||
${RK_USERDATA_FS_TYPE:+userdata:/userdata:${RK_USERDATA_FS_TYPE}}
|
||||
"
|
||||
|
||||
# <dev>:<mount point>:<fs type>:<mount flags>:<source dir>, for example:
|
||||
# RK_EXTRA_PARTITIONS="oem:/oem:ext2:defaults:oem_normal userdata:/userdata:vfat:errors=remount-ro:userdata_empty"
|
||||
# <dev>:<mount point>:<fs type>:<mount flags>:<source dir>:<image size(M|K|auto)>
|
||||
# for example:
|
||||
# RK_EXTRA_PARTITIONS="oem:/oem:ext2:defaults:oem_normal:256M
|
||||
# userdata:/userdata:vfat:errors=remount-ro:userdata_empty:auto"
|
||||
RK_EXTRA_PARTITIONS=${RK_EXTRA_PARTITIONS:-${RK_LEGACY_PARTITIONS}}
|
||||
|
||||
function fixup_root()
|
||||
|
||||
Reference in New Issue
Block a user