# binary name | part number | bs | label | fs type
declare -a PART_TABLE=(
"boot.img" 1 4M boot vfat
- "rootfs.img" 2 4M rootfs ext4
+ "rootfs.img" 2 4M rootfs_a ext4
"system-data.img" 3 4M system-data ext4
"user.img" 5 4M user ext4
- "modules.img" 6 4M modules ext4
- "ramdisk.img" 7 4M ramdisk ext4
- "ramdisk-recovery.img" 8 4M ramdisk-recovery ext4
+ "modules.img" 6 4M modules_a ext4
+ "ramdisk.img" 7 4M ramdisk_a ext4
+ "ramdisk-recovery.img" 8 4M recovery_a ext4
"hal.img" 10 4M hal ext4
+ "rootfs.img" 11 4M rootfs_b ext4
+ "modules.img" 12 4M modules_b ext4
+ "ramdisk.img" 13 4M ramdisk_b ext4
+ "ramdisk-recovery.img" 14 4M recovery_b ext4
+ )
+declare -a PART_TABLE_B=(
+ "rootfs.img" 11 4M rootfs_b ext4
+ "modules.img" 12 4M modules_b ext4
+ "ramdisk.img" 13 4M ramdisk_b ext4
+ "ramdisk-recovery.img" 14 4M recovery_b ext4
)
declare -r -i PART_TABLE_COL=5
declare -r -i PART_TABLE_ROW=${#PART_TABLE[*]}/${PART_TABLE_COL}
+declare -r -i PART_TABLE_ROW_B=${#PART_TABLE_B[*]}/${PART_TABLE_COL}
# partition table support
function get_index_use_name () {
return $idx
}
+# partition table support
+function get_index_use_name_to_b () {
+ local -r binary_name=$1
+
+ for ((idx=0;idx<$PART_TABLE_ROW_B;idx++)); do
+ if [ ${PART_TABLE_B[idx * ${PART_TABLE_COL} + 0]} == "$binary_name" ]; then
+ return $idx
+ fi
+ done
+
+ # return out of bound index
+ return $idx
+}
+
function print_message () {
local color=$1
local message=$2
return
fi
- if ! [ -b "$device" ]; then
- print_message 1 "$device is not a block device."
- exit 1
+ local -r input_size=`du -b $fusing_img | awk '{print $1}'`
+ local -r input_size_mb=`expr $input_size / 1024 / 1024`
+
+ print_message 2 "[Fusing $1 ($input_size_mb MiB)]"
+ if [ "$blktype" == "part" ]; then
+ local MOUNT_PART=`mount | grep $device`
+ if [ "$MOUNT_PART" != "" ]; then
+ umount $device
+ fi
+ fi
+ if [ $OLD_DD == 1 ]; then
+ dd if=$fusing_img | pv -s $input_size | dd of=$device bs=$bs
+ else
+ dd if=$fusing_img of=$device bs=$bs status=progress oflag=direct
+ fi
+
+ local -r fstype=`blkid -o value -s TYPE $device`
+ if [[ "$fstype" =~ "ext" ]]; then
+ resize2fs -f $device
+ fi
+}
+
+function fusing_image_to_b () {
+ local -r fusing_img=$1
+
+ # get binary info using basename
+ get_index_use_name_to_b $(basename "$fusing_img")
+
+ local -r -i part_idx=$?
+
+ if [ $part_idx -ne $PART_TABLE_ROW_B ];then
+ local -r num=${PART_TABLE_B[${part_idx} * ${PART_TABLE_COL} + 1]}
+ if [ "${num}" == "" ]; then
+ local -r blktype=disk
+ else
+ local -r blktype=part
+ fi
+ local -r device=/dev/`lsblk ${DEVICE} -o TYPE,KNAME | awk "/^${blktype}.*[a-z]${num}\$/ { print \\\$2 }"`
+ local -r bs=${PART_TABLE_B[${part_idx} * ${PART_TABLE_COL} + 2]}
+ else
+ echo "Not supported binary: $fusing_img"
+ return
fi
local -r input_size=`du -b $fusing_img | awk '{print $1}'`
for file in *
do
fusing_image $file
+ fusing_image_to_b $file
done
cd ..
;;
*)
fusing_image $filename
+ fusing_image_to_b $filename
;;
esac
done
if [ $major -gt 2 ]; then
sfdisk_new=1
+ if [ $major -eq 2 -a $minor -ge 28 ]; then
+ support_delete=1
+ fi
else
if [ $major -eq 2 -a $minor -ge 26 ]; then
sfdisk_new=1
- if [ $major -eq 2 -a $minor -ge 28 ]; then
- support_delete=1
- fi
fi
fi
local -r INFORM_SZ=8
local -r HAL_SZ=256
local -r RESERVED2_SZ=125
- local -r EXTEND_SZ=12
+ local -r EXTEND_SZ=36
- let "USER_SZ = $SIZE_MB - $BOOT_SZ - $ROOTFS_SZ - $DATA_SZ - $MODULE_SZ - $RAMDISK_SZ - $RAMDISK_RECOVERY_SZ - $INFORM_SZ - $EXTEND_SZ - $HAL_SZ - $RESERVED2_SZ"
+ let "USER_SZ = $SIZE_MB - $BOOT_SZ - $ROOTFS_SZ * 2 - $DATA_SZ - $MODULE_SZ * 2 - $RAMDISK_SZ * 2 - $RAMDISK_RECOVERY_SZ * 2 - $INFORM_SZ - $EXTEND_SZ - $HAL_SZ - $RESERVED2_SZ"
local -r BOOT=${PART_TABLE[0 * ${PART_TABLE_COL} + 3]}
- local -r ROOTFS=${PART_TABLE[1 * ${PART_TABLE_COL} + 3]}
+ local -r ROOTFS_A=${PART_TABLE[1 * ${PART_TABLE_COL} + 3]}
local -r SYSTEMDATA=${PART_TABLE[2 * ${PART_TABLE_COL} + 3]}
local -r USER=${PART_TABLE[3 * ${PART_TABLE_COL} + 3]}
- local -r MODULE=${PART_TABLE[4 * ${PART_TABLE_COL} + 3]}
- local -r RAMDISK=${PART_TABLE[5 * ${PART_TABLE_COL} + 3]}
- local -r RAMDISK_RECOVERY=${PART_TABLE[6 * ${PART_TABLE_COL} + 3]}
+ local -r MODULE_A=${PART_TABLE[4 * ${PART_TABLE_COL} + 3]}
+ local -r RAMDISK_A=${PART_TABLE[5 * ${PART_TABLE_COL} + 3]}
+ local -r RAMDISK_RECOVERY_A=${PART_TABLE[6 * ${PART_TABLE_COL} + 3]}
local -r INFORM=inform
local -r HAL=${PART_TABLE[7 * ${PART_TABLE_COL} + 3]}
+ local -r ROOTFS_B=${PART_TABLE[8 * ${PART_TABLE_COL} + 3]}
+ local -r MODULE_B=${PART_TABLE[9 * ${PART_TABLE_COL} + 3]}
+ local -r RAMDISK_B=${PART_TABLE[10 * ${PART_TABLE_COL} + 3]}
+ local -r RAMDISK_RECOVERY_B=${PART_TABLE[10 * ${PART_TABLE_COL} + 3]}
local -r RESERVED2=reserved2
if [[ $USER_SZ -le 100 ]]
echo "Label dev size"
echo "================================================"
echo $BOOT" " $DISK"1 " $BOOT_SZ "MB"
- echo $ROOTFS" " $DISK"2 " $ROOTFS_SZ "MB"
+ echo $ROOTFS_A" " $DISK"2 " $ROOTFS_SZ "MB"
echo $SYSTEMDATA" " $DISK"3 " $DATA_SZ "MB"
echo "[Extend]"" " $DISK"4"
echo " "$USER" " $DISK"5 " $USER_SZ "MB"
- echo " "$MODULE" " $DISK"6 " $MODULE_SZ "MB"
- echo " "$RAMDISK" " $DISK"7 " $RAMDISK_SZ "MB"
- echo " "$RAMDISK_RECOVERY" " $DISK"8 " $RAMDISK_RECOVERY_SZ "MB"
- echo " "$INFORM" " $DISK"9 " $INFORM_SZ "MB"
+ echo " "$MODULE_A" " $DISK"6 " $MODULE_SZ "MB"
+ echo " "$RAMDISK_A" " $DISK"7 " $RAMDISK_SZ "MB"
+ echo " "$RAMDISK_RECOVERY_A" " $DISK"8 " $RAMDISK_RECOVERY_SZ "MB"
+ echo " "$INFORM" " $DISK"9 " $INFORM_SZ "MB"
echo " "$HAL" " $DISK"10 " $HAL_SZ "MB"
- echo " "$RESERVED2" " $DISK"11 " $RESERVED2_SZ "MB"
+ echo " "$ROOTFS_B" " $DISK"11 " $ROOTFS_SZ "MB"
+ echo " "$MODULE_B" " $DISK"12 " $MODULE_SZ "MB"
+ echo " "$RAMDISK_B" " $DISK"13 " $RAMDISK_SZ "MB"
+ echo " "$RAMDISK_RECOVERY_B" " $DISK"14 " $RAMDISK_RECOVERY_SZ "MB"
+ echo " "$RESERVED2" " $DISK"15 " $RESERVED2_SZ "MB"
local MOUNT_LIST=`mount | grep $DISK | awk '{print $1}'`
for mnt in $MOUNT_LIST
,${RAMDISK_RECOVERY_SZ}MiB,,-
,${INFORM_SZ}MiB,,-
,${HAL_SZ}MiB,,-
+ ,${ROOTFS_SZ}MiB,,-
+ ,${MODULE_SZ}MiB,,-
+ ,${RAMDISK_SZ}MiB,,-
+ ,${RAMDISK_RECOVERY_SZ}MiB,,-
,${RESERVED2_SZ}MiB,,-
__EOF__
else
# calculate start positions for alignment for extended partitions
let "USER_START = 4 + $BOOT_SZ + $ROOTFS_SZ + $DATA_SZ + 1"
- let "MODULE_START = $USER_START + $USER_SZ + 1"
- let "RAMDISK_START = $MODULE_START + $MODULE_SZ + 1"
- let "RAMDISK_RECOVERY_START = $RAMDISK_START + $RAMDISK_SZ + 1"
- let "INFORM_START = $RAMDISK_RECOVERY_START + $RAMDISK_RECOVERY_SZ + 1"
+ let "MODULE_A_START = $USER_START + $USER_SZ + 1"
+ let "RAMDISK_A_START = $MODULE_A_START + $MODULE_SZ + 1"
+ let "RAMDISK_RECOVERY_A_START = $RAMDISK_A_START + $RAMDISK_SZ + 1"
+ let "INFORM_START = $RAMDISK_RECOVERY_A_START + $RAMDISK_RECOVERY_SZ + 1"
let "HAL_START = $INFORM_START + $INFORM_SZ + 1"
- let "RESERVED2_START = $HAL_START + $HAL_SZ + 1"
+ let "ROOTFS_B_START = $HAL_START + $HAL_SZ + 1"
+ let "MODULE_B_START = $ROOTFS_B_START + $ROOTFS_SZ + 1"
+ let "RAMDISK_B_START = $MODULE_B_START + $MODULE_SZ + 1"
+ let "RAMDISK_RECOVERY_B_START = $RAMDISK_B_START + $RAMDISK_SZ + 1"
+ let "RESERVED2_START = $RAMDISK_RECOVERY_B_START + $RAMDISK_RECOVERY_SZ + 1"
sfdisk --in-order --Linux --unit M $DISK <<-__EOF__
4,$BOOT_SZ,0xE,*
,$DATA_SZ,,-
,,E,-
$USER_START,$USER_SZ,,-
- $MODULE_START,$MODULE_SZ,,-
- $RAMDISK_START,$RAMDISK_SZ,,-
- $RAMDISK_RECOVERY_START,$RAMDISK_RECOVERY_SZ,,-
+ $MODULE_A_START,$MODULE_SZ,,-
+ $RAMDISK_A_START,$RAMDISK_SZ,,-
+ $RAMDISK_RECOVERY_A_START,$RAMDISK_RECOVERY_SZ,,-
$INFORM_START,$INFORM_SZ,,-
$HAL_START,$HAL_SZ,,-
+ $ROOTFS_B_START,$ROOTFS_SZ,,-
+ $MODULE_B_START,$MODULE_SZ,,-
+ $RAMDISK_B_START,$RAMDISK_SZ,,-
+ $RAMDISK_RECOVERY_B_START,$RAMDISK_RECOVERY_SZ,,-
$RESERVED2_START,$RESERVED2_SZ,,-
__EOF__
fi
umount ./mnt_tmp
rmdir mnt_tmp
- local -r PART11=/dev/`lsblk ${DISK} -o TYPE,KNAME | grep part | awk '{ print $2 }' | grep -G "[a-z]11\$"`
- mkfs.ext4 -q ${PART11} -L $RESERVED2 -F
+ local -r PART15=/dev/`lsblk ${DISK} -o TYPE,KNAME | grep part | awk '{ print $2 }' | grep -G "[a-z]15\$"`
+ mkfs.ext4 -q ${PART15} -L $RESERVED2 -F
}
function show_usage () {
function check_args () {
if [ "$DEVICE" == "" ]; then
- echo "$(tput setaf 1)$(tput bold)- Device node is empty!"
+ echo -n "$(tput setaf 3)$(tput bold)$DEVICE will be formatted, Is it OK? [y/<n>] "
show_usage
tput sgr 0
exit 0
if [ "$FORMAT" == "1" ]; then
echo ""
- echo -n "$(tput setaf 3)$(tput bold)$DEVICE will be formatted, Is it OK? [y/<n>] "
+ echo "$(tput setaf 3)$(tput bold)$DEVICE will be formatted, Is it OK? [y/<n>]"
tput sgr 0
read input
if [ "$input" == "y" ] || [ "$input" == "Y" ]; then