Remove sd_fusing shell scripts. Instead, use sd_fusing.py script.
We don't support shell script anymore.
Change-Id: I4915893a0aeaaed46f0b0dcb40eb546f85c8fed0
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
+++ /dev/null
-#!/bin/bash
-
-declare FORMAT=""
-declare DEVICE=""
-declare -i OLD_DD=0
-
-# Binaires array for fusing
-declare -a FUSING_BINARY_ARRAY
-declare -i FUSING_BINARY_NUM=0
-
-declare CONV_ASCII=""
-declare -i FUS_ENTRY_NUM=0
-
-# binary name | part number | bs | label | fs type
-declare -a PART_TABLE=(
- "boot.img" 1 4M boot vfat
- "rootfs.img" 2 4M rootfs 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
- "hal.img" 10 4M hal ext4
- )
-
-declare -r -i PART_TABLE_COL=5
-declare -r -i PART_TABLE_ROW=${#PART_TABLE[*]}/${PART_TABLE_COL}
-
-# partition table support
-function get_index_use_name () {
- local -r binary_name=$1
-
- for ((idx=0;idx<$PART_TABLE_ROW;idx++)); do
- if [ ${PART_TABLE[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
-
- tput setaf $color
- tput bold
- echo ""
- echo $message
- tput sgr 0
-}
-
-function check_ddversion () {
- # NOTE
- # before coreutils dd 8.24, dd doesn't support "status=progress"
- # and the option causes fusing failure. For backward compatibility,
- # do not use the option for old dd
- local version=(`dd --version | head -1 | grep -o '[0-9]\+'`)
- local major=${version[0]}
- local minor=${version[1]}
-
- if [ $major -lt 8 ]; then
- OLD_DD=1
- elif [ $major -eq 8 -a $minor -lt 24 ]; then
- OLD_DD=1
- fi
-}
-
-function fusing_image () {
- local -r fusing_img=$1
-
- # get binary info using basename
- get_index_use_name $(basename "$fusing_img")
- local -r -i part_idx=$?
-
- if [ $part_idx -ne $PART_TABLE_ROW ];then
- local -r num=${PART_TABLE[${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[${part_idx} * ${PART_TABLE_COL} + 2]}
- else
- echo "Unsupported binary: $fusing_img"
- return
- fi
-
- if ! [ -b "$device" ]; then
- print_message 1 "$device is not a block device."
- exit 1
- fi
-
- 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 fuse_image_tarball () {
- local -r filepath=$1
- local -r temp_dir="tar_tmp"
-
- mkdir -p $temp_dir
- tar xvf $filepath -C $temp_dir
- cd $temp_dir
-
- for file in *
- do
- fusing_image $file
- done
-
- cd ..
- rm -rf $temp_dir
- eval sync
-}
-
-function fuse_image () {
-
- if [ "$FUSING_BINARY_NUM" == 0 ]; then
- return
- fi
-
- for ((fuse_idx = 0 ; fuse_idx < $FUSING_BINARY_NUM ; fuse_idx++))
- do
- local filename=${FUSING_BINARY_ARRAY[fuse_idx]}
-
- case "$filename" in
- *.tar | *.tar.gz)
- fuse_image_tarball $filename
- ;;
- *)
- fusing_image $filename
- ;;
- esac
- done
- echo ""
-}
-
-# partition format
-function mkpart_3 () {
- # NOTE: if your sfdisk version is less than 2.26.0, then you should use following sfdisk command:
- # sfdisk --in-order --Linux --unit M $DISK <<-__EOF__
-
- # NOTE: sfdisk 2.26 doesn't support units other than sectors and marks --unit option as deprecated.
- # The input data needs to contain multipliers (MiB) instead.
- local version=(`sfdisk -v | grep -o '[0-9]\+'`)
- local major=${version[0]}
- local minor=${version[1]}
- local sfdisk_new=0
- local support_delete=0
- local sfdisk_37=0
-
- if [ $major -gt 2 ]; then
- sfdisk_new=1
- 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
- if [ $major -eq 2 -a $minor -ge 37 ]; then
- sfdisk_37=1
- fi
- fi
- fi
-
- if [ $sfdisk_new == 0 ]; then
- echo "$(tput setaf 3)$(tput bold)NOTICE: Your sfidk ${version[0]}.${version[1]} version is too old. It can do unstable behavior!"
- tput sgr 0
- echo ""
-
- fi
-
- local -r DISK=$DEVICE
- local -r SIZE=`sfdisk -s $DISK`
- local -r SIZE_MB=$((SIZE >> 10))
-
- local -r BOOT_SZ=64
- local -r ROOTFS_SZ=3072
- local -r DATA_SZ=1344
- local -r MODULE_SZ=32
- local -r RAMDISK_SZ=32
- local -r RAMDISK_RECOVERY_SZ=32
- local -r INFORM_SZ=8
- local -r HAL_SZ=256
- local -r RESERVED2_SZ=125
- local -r EXTEND_SZ=12
-
- 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"
-
- local -r BOOT=${PART_TABLE[0 * ${PART_TABLE_COL} + 3]}
- local -r ROOTFS=${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 INFORM=inform
- local -r HAL=${PART_TABLE[7 * ${PART_TABLE_COL} + 3]}
- local -r RESERVED2=reserved2
-
- if [[ $USER_SZ -le 100 ]]
- then
- echo "We recommend to use more than 4GB disk"
- exit 0
- fi
-
- echo "================================================"
- echo "Label dev size"
- echo "================================================"
- echo $BOOT" " $DISK"1 " $BOOT_SZ "MB"
- echo $ROOTFS" " $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 " "$HAL" " $DISK"10 " $HAL_SZ "MB"
- echo " "$RESERVED2" " $DISK"11 " $RESERVED2_SZ "MB"
-
- local MOUNT_LIST=`mount | grep $DISK | awk '{print $1}'`
- for mnt in $MOUNT_LIST
- do
- umount $mnt
- done
-
- echo "Remove partition table..."
- dd if=/dev/zero of=$DISK bs=512 count=32 conv=notrunc
-
- if [ $sfdisk_new == 1 ]; then
- if [ $support_delete == 1 ]; then
- sfdisk --delete $DISK
- fi
- if [ $sfdisk_37 == 1 ] ; then
- sfdisk $DISK <<-__EOF__
- 4MiB,${BOOT_SZ}MiB,0xE,*
- ,${ROOTFS_SZ}MiB,,-
- ,${DATA_SZ}MiB,,-
- 12MiB,,E,-
- ,${USER_SZ}MiB,,-
- ,${MODULE_SZ}MiB,,-
- ,${RAMDISK_SZ}MiB,,-
- ,${RAMDISK_RECOVERY_SZ}MiB,,-
- ,${INFORM_SZ}MiB,,-
- ,${HAL_SZ}MiB,,-
- ,${RESERVED2_SZ}MiB,,-
- __EOF__
- else
- sfdisk $DISK <<-__EOF__
- 4MiB,${BOOT_SZ}MiB,0xE,*
- 8MiB,${ROOTFS_SZ}MiB,,-
- 8MiB,${DATA_SZ}MiB,,-
- 12MiB,,E,-
- ,${USER_SZ}MiB,,-
- ,${MODULE_SZ}MiB,,-
- ,${RAMDISK_SZ}MiB,,-
- ,${RAMDISK_RECOVERY_SZ}MiB,,-
- ,${INFORM_SZ}MiB,,-
- ,${HAL_SZ}MiB,,-
- ,${RESERVED2_SZ}MiB,,-
- __EOF__
- fi
- 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 "HAL_START = $INFORM_START + $INFORM_SZ + 1"
- let "RESERVED2_START = $HAL_START + $HAL_SZ + 1"
-
- sfdisk --in-order --Linux --unit M $DISK <<-__EOF__
- 4,$BOOT_SZ,0xE,*
- ,$ROOTFS_SZ,,-
- ,$DATA_SZ,,-
- ,,E,-
- $USER_START,$USER_SZ,,-
- $MODULE_START,$MODULE_SZ,,-
- $RAMDISK_START,$RAMDISK_SZ,,-
- $RAMDISK_RECOVERY_START,$RAMDISK_RECOVERY_SZ,,-
- $INFORM_START,$INFORM_SZ,,-
- $HAL_START,$HAL_SZ,,-
- $RESERVED2_START,$RESERVED2_SZ,,-
- __EOF__
- fi
-
- for ((idx=0;idx<$PART_TABLE_ROW;idx++)); do
- local PART=/dev/`lsblk ${DISK} -o TYPE,KNAME | awk "/^part.*[a-z]${PART_TABLE[$idx * ${PART_TABLE_COL} + 1]}\$/ { print \\\$2 }"`
- if [ "${PART_TABLE[$idx * ${PART_TABLE_COL} + 4]}" == "vfat" ]; then
- mkfs.vfat -F 16 ${PART} -n ${PART_TABLE[$idx * ${PART_TABLE_COL} + 3]}
- if [ $? -eq 1 ]; then
- echo "Failed to format as FAT filesystem"
- exit -1
- fi
- elif [ "${PART_TABLE[$idx * ${PART_TABLE_COL} + 4]}" == "ext4" ]; then
- mkfs.ext4 -q ${PART} -L ${PART_TABLE[$idx * ${PART_TABLE_COL} + 3]} -F
- else
- echo "Skip to format for unknown filesystem type ${PART_TABLE[$idx * ${PART_TABLE_COL} + 4]} for part$idx, ${PART_TABLE[$idx * ${PART_TABLE_COL} + 3]}"
- fi
- done
-
- local -r PART9=/dev/`lsblk ${DISK} -o TYPE,KNAME | grep part | awk '{ print $2 }' | grep -G "[a-z]9\$"`
- mkfs.ext4 -q ${PART9} -L $INFORM -F
-
- # create "reboot-param.bin" file in inform partition for passing reboot parameter
- # It should be done only once upon partition format.
- if [ -d mnt_tmp ]; then
- echo "Remove the existing mnt_tmp directory!!"
- rm -rf mnt_tmp
- fi
- mkdir mnt_tmp
- mount -t ext4 ${PART9} ./mnt_tmp
- touch ./mnt_tmp/reboot-param.bin
- sync
- 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
-}
-
-function show_usage () {
- echo "- Usage:"
- echo " sudo ./sd_fusing*.sh -d <device> [-b <path> <path> ..] [--format]"
-}
-
-function check_partition_format () {
- if [ "$FORMAT" != "2" ]; then
- echo "-----------------------"
- echo "Skip $DEVICE format"
- echo "-----------------------"
- return 0
- fi
-
- echo "-------------------------------"
- echo "Start $DEVICE format"
- echo ""
- mkpart_3
- echo "End $DEVICE format"
- echo "-------------------------------"
- echo ""
-}
-
-function check_args () {
- if [ "$DEVICE" == "" ]; then
- echo "$(tput setaf 1)$(tput bold)- Device node is empty!"
- show_usage
- tput sgr 0
- exit 0
- fi
-
- if [ "$DEVICE" != "" ]; then
- echo "Device: $DEVICE"
- fi
-
- if [ "$FUSING_BINARY_NUM" != 0 ]; then
- echo "Fusing binary: "
- for ((bid = 0 ; bid < $FUSING_BINARY_NUM ; bid++))
- do
- echo " ${FUSING_BINARY_ARRAY[bid]}"
- done
- echo ""
- fi
-
- if [ "$FORMAT" == "1" ]; then
- echo ""
- echo -n "$(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
- FORMAT=2
- else
- FORMAT=0
- fi
- fi
-}
-
-function check_device () {
- if [ ! -b "$DEVICE" ]; then
- echo "No such device: $DEVICE"
- exit 0
- fi
-
- DEVICE=/dev/`lsblk $DEVICE -o TYPE,KNAME | awk "/^disk/ { print \\\$2 }"`
-
- local REMOVABLE=`lsblk $DEVICE -nd -o RM | grep 1 | wc -l`
- local LOOPBACK=`lsblk $DEVICE -nd -o TYPE | grep loop | wc -l`
- if [ "$REMOVABLE" == "0" -a "$LOOPBACK" = "0" ]; then
- echo ""
- echo -n "$(tput setaf 3)$(tput bold)$DEVICE is neither a removable disk nor a loopback, Is it OK? [y/<n>] "
- tput sgr 0
- read input
- if [ "$input" != "y" ] && [ "$input" != "Y" ]; then
- exit 0
- fi
- fi
-
- if [ ! -w "$DEVICE" ]; then
- echo "Write not permitted: $DEVICE"
- exit 0
- fi
-}
-
-function print_logo () {
- echo ""
- echo "Raspberry Pi3/4 downloader, version 2.3.2"
- echo ""
-}
-
-print_logo
-
-function add_fusing_binary() {
- local declare binary_name=$1
-
- if [ "$binary_name" != "" ]; then
- if [ -f "$binary_name" ]; then
- FUSING_BINARY_ARRAY[$FUSING_BINARY_NUM]=$binary_name
-
- FUSING_BINARY_NUM=$((FUSING_BINARY_NUM + 1))
- else
- echo "No such file: $binary_name"
- fi
- fi
-}
-
-
-declare -i binary_option=0
-
-while test $# -ne 0; do
- option=$1
- shift
-
- case $option in
- --f | --format)
- FORMAT="1"
- binary_option=0
- ;;
- -d)
- DEVICE=$1
- binary_option=0
- shift
- ;;
- -b)
- add_fusing_binary $1
- binary_option=1
- shift
- ;;
- *)
- if [ $binary_option == 1 ];then
- add_fusing_binary $option
- else
- echo "Unkown command: $option"
- exit
- fi
- ;;
- esac
-done
-
-print_message 3 "NOTICE: This script will is deprecated. Please use sd_fusing.py instead."
-echo
-
-check_args
-check_device
-check_partition_format
-check_ddversion
-fuse_image
+++ /dev/null
-#!/bin/bash
-
-declare FORMAT=""
-declare DEVICE=""
-declare SKIP=0
-declare -i OLD_DD=0
-
-# Binaires array for fusing
-declare -a FUSING_BINARY_ARRAY
-declare -i FUSING_BINARY_NUM=0
-
-declare CONV_ASCII=""
-declare -i FUS_ENTRY_NUM=0
-declare -i ab_option=0
-
-# binary name | part number | bs | label | fs type
-declare -a PART_TABLE=(
- "boot.img" 1 4M boot_a vfat
- "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 module_a ext4
- "ramdisk.img" 7 4M ramdisk_a ext4
- "ramdisk-recovery.img" 8 4M ramdisk-recovery_a ext4
- "hal.img" 10 4M hal_a ext4
- "boot.img" 11 4M boot_b vfat
- "rootfs.img" 12 4M rootfs_b ext4
- "modules.img" 13 4M module_b ext4
- "ramdisk.img" 14 4M ramdisk_b ext4
- "ramdisk-recovery.img" 15 4M ramdisk-recovery_b ext4
- "hal.img" 16 4M hal_b ext4
- "system.img" 17 4M aot-system_a ext4
- "system.img" 18 4M aot-system_b ext4
- "vendor.img" 19 4M aot-vendor_a ext4
- "vendor.img" 20 4M aot-vendor_b ext4
- )
-declare -a PART_TABLE_B=(
- "boot.img" 11 4M boot_b vfat
- "rootfs.img" 12 4M rootfs_b ext4
- "modules.img" 13 4M module_b ext4
- "ramdisk.img" 14 4M ramdisk_b ext4
- "ramdisk-recovery.img" 15 4M ramdisk-recovery_b ext4
- "hal.img" 16 4M hal_b ext4
- "system.img" 18 4M aot-system_b ext4
- "vendor.img" 20 4M aot-vendor_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 () {
- local -r binary_name=$1
-
- for ((idx=0;idx<$PART_TABLE_ROW;idx++)); do
- if [ ${PART_TABLE[idx * ${PART_TABLE_COL} + 0]} == "$binary_name" ]; then
- return $idx
- fi
- done
-
- # return out of bound index
- 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
-
- tput setaf $color
- tput bold
- echo ""
- echo $message
- tput sgr 0
-}
-
-function check_ddversion () {
- # NOTE
- # before coreutils dd 8.24, dd doesn't support "status=progress"
- # and the option causes fusing failure. For backward compatibility,
- # do not use the option for old dd
- local version=(`dd --version | head -1 | grep -o '[0-9]\+'`)
- local major=${version[0]}
- local minor=${version[1]}
-
- if [ $major -lt 8 ]; then
- OLD_DD=1
- elif [ $major -eq 8 -a $minor -lt 24 ]; then
- OLD_DD=1
- fi
-}
-
-function fusing_image () {
- if [ $ab_option == 2 ] ; then
- echo "Skip to update Partition A"
- return
- fi
- local -r fusing_img=$1
-
- # get binary info using basename
- get_index_use_name $(basename "$fusing_img")
- local -r -i part_idx=$?
-
- if [ $part_idx -ne $PART_TABLE_ROW ];then
- local -r num=${PART_TABLE[${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[${part_idx} * ${PART_TABLE_COL} + 2]}
- else
- echo "Unsupported binary: $fusing_img"
- return
- fi
-
- 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
-}
-
-function fusing_image_to_b () {
- if [ $ab_option == 0 ] ; then
- echo "Skip to update Partition B"
- return
- fi
- 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 "Unsupported binary: $fusing_img"
- return
- fi
-
- 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
-}
-
-function fuse_image_tarball () {
- local -r filepath=$1
- local -r temp_dir="tar_tmp"
-
- mkdir -p $temp_dir
- tar xvf $filepath -C $temp_dir
- cd $temp_dir
-
- for file in *
- do
- fusing_image $file
- fusing_image_to_b $file
- done
-
- cd ..
- rm -rf $temp_dir
- eval sync
-}
-
-function initialize_parameter () {
- # create "reboot-param.bin" file in inform partition for passing reboot parameter
- # It should be done only once upon partition format.
- local -r DISK=$DEVICE
- local -r PART9=/dev/`lsblk ${DISK} -o TYPE,KNAME | grep part | awk '{ print $2 }' | grep -G "[a-z]9\$"`
-
- if [ -d mnt_tmp ]; then
- echo "Remove the existing mnt_tmp directory!!"
- rm -rf mnt_tmp
- fi
- mkdir mnt_tmp
- mount -t ext4 ${PART9} ./mnt_tmp
- echo "norm" > ./mnt_tmp/reboot-param.bin
- echo "norm" > ./mnt_tmp/reboot-param.info
- echo "a" > ./mnt_tmp/partition-ab.info
- echo "1" > ./mnt_tmp/partition-ab-cloned.info
- echo "0" > ./mnt_tmp/upgrade-status.info
-
- # To check the status of partition. (default "ok")
- echo "ok" > ./mnt_tmp/partition-a-status.info
- echo "ok" > ./mnt_tmp/partition-b-status.info
-
- sync
- umount ./mnt_tmp
- rmdir mnt_tmp
-}
-
-function fuse_image () {
-
- if [ "$FUSING_BINARY_NUM" == 0 ]; then
- return
- fi
-
- # Clear preivous values before flashing image
- initialize_parameter
-
- for ((fuse_idx = 0 ; fuse_idx < $FUSING_BINARY_NUM ; fuse_idx++))
- do
- local filename=${FUSING_BINARY_ARRAY[fuse_idx]}
-
- case "$filename" in
- *.tar | *.tar.gz)
- fuse_image_tarball $filename
- ;;
- *)
- fusing_image $filename
- fusing_image_to_b $filename
- ;;
- esac
- done
- echo ""
-}
-
-# partition format
-function mkpart_3 () {
- # NOTE: if your sfdisk version is less than 2.26.0, then you should use following sfdisk command:
- # sfdisk --in-order --Linux --unit M $DISK <<-__EOF__
-
- # NOTE: sfdisk 2.26 doesn't support units other than sectors and marks --unit option as deprecated.
- # The input data needs to contain multipliers (MiB) instead.
- local version=(`sfdisk -v | grep -o '[0-9]\+'`)
- local major=${version[0]}
- local minor=${version[1]}
- local sfdisk_new=0
- local support_delete=0
-
- 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
- fi
- fi
-
- if [ $sfdisk_new == 0 ]; then
- echo "$(tput setaf 3)$(tput bold)NOTICE: Your sfdisk ${version[0]}.${version[1]} version is too old. Update Latest sfdisk!"
- tput sgr 0
- exit -1
- fi
-
- local -r DISK=$DEVICE
- local -r SIZE=`sfdisk -s $DISK`
- local -r SIZE_MB=$((SIZE >> 10))
-
- local -r BOOT_SZ=64
- local -r ROOTFS_SZ=3072
- local -r DATA_SZ=1344
- local -r MODULE_SZ=32
- local -r RAMDISK_SZ=32
- local -r RAMDISK_RECOVERY_SZ=32
- local -r INFORM_SZ=8
- local -r HAL_SZ=256
- local -r PARAM_SZ=4
- local -r RESERVED1_SZ=64
- local -r RESERVED2_SZ=125
- local -r EXTEND_SZ=36
- local -r AOT_SYSTEM_SZ=1536
- local -r AOT_VENDOR_SZ=256
-
- let "USER_SZ = $SIZE_MB - $BOOT_SZ * 2 - $ROOTFS_SZ * 2 - $DATA_SZ - $MODULE_SZ * 2 - $RAMDISK_SZ * 2 - $RAMDISK_RECOVERY_SZ * 2 - $INFORM_SZ - $EXTEND_SZ - $HAL_SZ * 2 - $RESERVED1_SZ - $RESERVED2_SZ - $PARAM_SZ - $AOT_SYSTEM_SZ * 2 - $AOT_VENDOR_SZ *2"
-
- local -r BOOT_A=${PART_TABLE[0 * ${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_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_A=${PART_TABLE[7 * ${PART_TABLE_COL} + 3]}
- local -r BOOT_B=${PART_TABLE[8 * ${PART_TABLE_COL} + 3]}
- local -r ROOTFS_B=${PART_TABLE[9 * ${PART_TABLE_COL} + 3]}
- local -r MODULE_B=${PART_TABLE[10 * ${PART_TABLE_COL} + 3]}
- local -r RAMDISK_B=${PART_TABLE[11 * ${PART_TABLE_COL} + 3]}
- local -r RAMDISK_RECOVERY_B=${PART_TABLE[12 * ${PART_TABLE_COL} + 3]}
- local -r HAL_B=${PART_TABLE[13 * ${PART_TABLE_COL} + 3]}
- local -r AOT_SYSTEM_A=${PART_TABLE[14 * ${PART_TABLE_COL} + 3]}
- local -r AOT_SYSTEM_B=${PART_TABLE[15 * ${PART_TABLE_COL} + 3]}
- local -r AOT_VENDOR_A=${PART_TABLE[16 * ${PART_TABLE_COL} + 3]}
- local -r AOT_VENDOR_B=${PART_TABLE[17 * ${PART_TABLE_COL} + 3]}
- local -r RESERVED0=reserved0
- local -r RESERVED1=reserved1
- local -r RESERVED2=reserved2
-
- if [[ $USER_SZ -le 100 ]]
- then
- echo "We recommend to use more than 8GB disk"
- exit 0
- fi
-
- echo "================================================"
- echo "Label dev size"
- echo "================================================"
- echo $BOOT_A" " $DISK"1 " $BOOT_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_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_A" " $DISK"10 " $HAL_SZ "MB"
- echo " "$BOOT_B" " $DISK"11 " $BOOT_SZ "MB"
- echo " "$ROOTFS_B" " $DISK"12 " $ROOTFS_SZ "MB"
- echo " "$MODULE_B" " $DISK"13 " $MODULE_SZ "MB"
- echo " "$RAMDISK_B" " $DISK"14 " $RAMDISK_SZ "MB"
- echo " "$RAMDISK_RECOVERY_B" " $DISK"15 " $RAMDISK_RECOVERY_SZ "MB"
- echo " "$HAL_B" " $DISK"16 " $HAL_SZ "MB"
- echo " "$AOT_SYSTEM_A" " $DISK"17 " $AOT_SYSTEM_SZ "MB"
- echo " "$AOT_SYSTEM_B" " $DISK"18 " $AOT_SYSTEM_SZ "MB"
- echo " "$AOT_VENDOR_A" " $DISK"19 " $AOT_VENDOR_SZ "MB"
- echo " "$AOT_VENDOR_B" " $DISK"20 " $AOT_VENDOR_SZ "MB"
- echo " "$RESERVED0" " $DISK"21 " $PARAM_SZ "MB"
- echo " "$RESERVED1" " $DISK"22 " $RESERVED1_SZ "MB"
- echo " "$RESERVED2" " $DISK"23 " $RESERVED2_SZ "MB"
-
- local MOUNT_LIST=`mount | grep $DISK | awk '{print $1}'`
- for mnt in $MOUNT_LIST
- do
- umount $mnt
- done
-
- echo "Remove partition table..."
- dd if=/dev/zero of=$DISK bs=512 count=32 conv=notrunc
-
- if [ $support_delete == 1 ]; then
- sfdisk --delete $DISK
- fi
-
- SCRIPT=""
- for ((idx=0; idx < $PART_TABLE_ROW; idx++)); do
- NR=${PART_TABLE[idx * ${PART_TABLE_COL} + 1]}
- eval "PART_LABEL_NR_${NR}=${PART_TABLE[idx * ${PART_TABLE_COL} + 3]}"
- done
-
- sfdisk $DISK <<-__EOF__
- label: gpt
- start=4MiB, size=${BOOT_SZ}MiB, type= C12A7328-F81F-11D2-BA4B-00A0C93EC93B, name=${PART_LABEL_NR_1}
- size=${ROOTFS_SZ}MiB, name=${PART_LABEL_NR_2}
- size=${DATA_SZ}MiB, name=${PART_LABEL_NR_3}
- size=${EXTEND_SZ}MiB, name=none
- size=${USER_SZ}MiB, name=${PART_LABEL_NR_5}
- size=${MODULE_SZ}MiB, name=${PART_LABEL_NR_6}
- size=${RAMDISK_SZ}MiB, name=${PART_LABEL_NR_7}
- size=${RAMDISK_RECOVERY_SZ}MiB, name=${PART_LABEL_NR_8}
- size=${INFORM_SZ}MiB, name=inform
- size=${HAL_SZ}MiB, name=${PART_LABEL_NR_10}
- size=${BOOT_SZ}MiB, type= C12A7328-F81F-11D2-BA4B-00A0C93EC93B, name=${PART_LABEL_NR_11}
- size=${ROOTFS_SZ}MiB, name=${PART_LABEL_NR_12}
- size=${MODULE_SZ}MiB, name=${PART_LABEL_NR_13}
- size=${RAMDISK_SZ}MiB, name=${PART_LABEL_NR_14}
- size=${RAMDISK_RECOVERY_SZ}MiB, name=${PART_LABEL_NR_15}
- size=${HAL_SZ}MiB, name=${PART_LABEL_NR_16}
- size=${AOT_SYSTEM_SZ}MiB, name=${PART_LABEL_NR_17}
- size=${AOT_SYSTEM_SZ}MiB, name=${PART_LABEL_NR_18}
- size=${AOT_VENDOR_SZ}MiB, name=${PART_LABEL_NR_19}
- size=${AOT_VENDOR_SZ}MiB, name=${PART_LABEL_NR_20}
- size=${PARAM_SZ}MiB, name=reserved0
- size=${RESERVED1_SZ}MiB, name=reserved1
- size=${RESERVED2_SZ}MiB, name=reserved2
- __EOF__
-
-
- for ((idx=0;idx<$PART_TABLE_ROW;idx++)); do
- local PART=/dev/`lsblk ${DISK} -o TYPE,KNAME | awk "/^part.*[a-z]${PART_TABLE[$idx * ${PART_TABLE_COL} + 1]}\$/ { print \\\$2 }"`
- if [ "${PART_TABLE[$idx * ${PART_TABLE_COL} + 4]}" == "vfat" ]; then
- mkfs.vfat -F 16 ${PART} -n ${PART_TABLE[$idx * ${PART_TABLE_COL} + 3]}
- if [ $? -eq 1 ]; then
- echo "Failed to format as FAT filesystem"
- exit -1
- fi
- elif [ "${PART_TABLE[$idx * ${PART_TABLE_COL} + 4]}" == "ext4" ]; then
- mkfs.ext4 -q ${PART} -L ${PART_TABLE[$idx * ${PART_TABLE_COL} + 3]} -F
- else
- echo "Skip to format for unknown filesystem type ${PART_TABLE[$idx * ${PART_TABLE_COL} + 4]} for part$idx, ${PART_TABLE[$idx * ${PART_TABLE_COL} + 3]}"
- fi
- done
-
- local -r PART9=/dev/`lsblk ${DISK} -o TYPE,KNAME | grep part | awk '{ print $2 }' | grep -G "[a-z]9\$"`
- mkfs.ext4 -q ${PART9} -L $INFORM -F -O ^metadata_csum
-
- # initialize value of parameters
- initialize_parameter
-
- local -r PART21=/dev/`lsblk ${DISK} -o TYPE,KNAME | grep part | awk '{ print $2 }' | grep -G "[a-z]17\$"`
- mkfs.ext4 -q ${PART21} -L $RESERVED0 -F
-
- local -r PART22=/dev/`lsblk ${DISK} -o TYPE,KNAME | grep part | awk '{ print $2 }' | grep -G "[a-z]18\$"`
- mkfs.ext4 -q ${PART22} -L $RESERVED1 -F
-
- local -r PART23=/dev/`lsblk ${DISK} -o TYPE,KNAME | grep part | awk '{ print $2 }' | grep -G "[a-z]19\$"`
- mkfs.ext4 -q ${PART23} -L $RESERVED2 -F
-}
-
-function skip_resize () {
- if [ "${SKIP}" == "0" ]; then
- return 0;
- fi
-
- if [ ! -d mnt_tmp ] ; then
- mkdir mnt_tmp
- fi
-
- mount -t ext4 ${DEVICE}3 ./mnt_tmp
- touch ./mnt_tmp/var/.resizefs_done
-
- echo "Rootfs resize will be skipped..."
- sync
- umount ./mnt_tmp
- rmdir mnt_tmp
-}
-
-function show_usage () {
- echo "- Usage:"
- echo " sudo ./sd_fusing*.sh -d <device> [-b <path> <path> ..] [--format] [--update [b] ]"
- echo " -d : device node "
- echo " -b : binary "
- echo " --update : If want to update Image about B Partition, use --update option with b"
- echo " Otherwise, it will be updated to both partition"
-}
-
-function check_partition_format () {
- if [ "$FORMAT" != "2" ]; then
- echo "-----------------------"
- echo "Skip $DEVICE format"
- echo "-----------------------"
- return 0
- fi
-
- echo "-------------------------------"
- echo "Start $DEVICE format"
- echo ""
- mkpart_3
- echo "End $DEVICE format"
- echo "-------------------------------"
- echo ""
-}
-
-function check_args () {
- if [ "$DEVICE" == "" ]; then
- echo "$(tput setaf 1)$(tput bold)- Device node is empty!"
- show_usage
- tput sgr 0
- exit 0
- fi
-
- if [ "$DEVICE" != "" ]; then
- echo "Device: $DEVICE"
- fi
-
- if [ "$FUSING_BINARY_NUM" != 0 ]; then
- echo "Fusing binary: "
- for ((bid = 0 ; bid < $FUSING_BINARY_NUM ; bid++))
- do
- echo " ${FUSING_BINARY_ARRAY[bid]}"
- done
- echo ""
- fi
-
- if [ "$FORMAT" == "1" ]; then
- echo ""
- echo -n "$(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
- FORMAT=2
- else
- FORMAT=0
- fi
- fi
-}
-
-function check_device () {
- if [ ! -b "$DEVICE" ]; then
- echo "No such device: $DEVICE"
- exit 0
- fi
-
- DEVICE=/dev/`lsblk $DEVICE -o TYPE,KNAME | awk '/^(disk|loop)/ { print $2 }'`
-
- local REMOVABLE=`lsblk $DEVICE -nd -o RM | grep 1 | wc -l`
- local LOOPBACK=`lsblk $DEVICE -nd -o TYPE | grep loop | wc -l`
- if [ "$REMOVABLE" == "0" -a "$LOOPBACK" = "0" ]; then
- echo ""
- echo -n "$(tput setaf 3)$(tput bold)$DEVICE is neither a removable disk nor a loopback, Is it OK? [y/<n>] "
- tput sgr 0
- read input
- if [ "$input" != "y" ] && [ "$input" != "Y" ]; then
- exit 0
- fi
- fi
-
- if [ ! -w "$DEVICE" ]; then
- echo "Write not permitted: $DEVICE"
- exit 0
- fi
-}
-
-function print_logo () {
- echo ""
- echo "Raspberry Pi4 downloader, version 1.0.13"
- echo "$(tput setaf 1)$(tput bold)NOTE: To use this script, it has to update to latest eeprom"
- echo ""
-}
-
-print_logo
-
-function add_fusing_binary() {
- local declare binary_name=$1
-
- if [ "$binary_name" != "" ]; then
- if [ -f "$binary_name" ]; then
- FUSING_BINARY_ARRAY[$FUSING_BINARY_NUM]=$binary_name
-
- FUSING_BINARY_NUM=$((FUSING_BINARY_NUM + 1))
- else
- echo "No such file: $binary_name"
- fi
- fi
-}
-
-
-declare -i binary_option=0
-
-while test $# -ne 0; do
- option=$1
- shift
-
- case $option in
- --f | --format)
- FORMAT="1"
- binary_option=0
- ;;
- -d)
- DEVICE=$1
- binary_option=0
- shift
- ;;
- -b)
- add_fusing_binary $1
- binary_option=1
- shift
- ;;
- --update)
- if [ "$1" == "b" ] ; then
- ab_option=2
- shift
- else
- ab_option=1
- fi
- ;;
- --skip-resize)
- SKIP=1
- ;;
- *)
- if [ $binary_option == 1 ];then
- add_fusing_binary $option
- else
- echo "Unkown command: $option"
- exit
- fi
- ;;
- esac
-done
-
-print_message 3 "NOTICE: This script will is deprecated. Please use sd_fusing.py instead."
-echo
-
-check_args
-check_device
-check_partition_format
-check_ddversion
-fuse_image
-skip_resize
+++ /dev/null
-#!/bin/bash
-
-declare CREATE=""
-declare DEVICE=""
-declare FILE=""
-declare FORMAT=""
-declare LOOP_SIZE="8192"
-declare -i OLD_DD=0
-
-# Binaires array for fusing
-declare -a FUSING_BINARY_ARRAY
-declare -i FUSING_BINARY_NUM=0
-
-declare CONV_ASCII=""
-declare -i FUS_ENTRY_NUM=0
-declare -i ab_option=0
-
-# binary name | part number | bs | label | fs type
-declare -a PART_TABLE=(
- "u-boot-spl.bin.normal.out" 1 4M SPL raw
- "u-boot.img" 2 4M u-boot raw
- "u-boot.itb" 2 4M u-boot raw
- "boot.img" 3 4M boot_a vfat
- "rootfs.img" 5 4M rootfs_a ext4
- "system-data.img" 6 4M system-data ext4
- "user.img" 7 4M user ext4
- "modules.img" 8 4M module_a ext4
- "ramdisk.img" 9 4M ramdisk_a ext4
- "ramdisk-recovery.img" 10 4M ramdisk-recovery_a ext4
- "hal.img" 12 4M hal_a ext4
- )
-
-declare -r -i PART_TABLE_COL=5
-declare -r -i PART_TABLE_ROW=${#PART_TABLE[*]}/${PART_TABLE_COL}
-
-# tear down loopback device on exit
-trap 'test -n "$FILE" && losetup -d "$DEVICE"' EXIT
-
-# partition table support
-function get_index_use_name () {
- local -r binary_name=$1
-
- for ((idx=0;idx<$PART_TABLE_ROW;idx++)); do
- if [ ${PART_TABLE[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
-
- tput setaf $color
- tput bold
- echo ""
- echo $message
- tput sgr 0
-}
-
-function check_ddversion () {
- # NOTE
- # before coreutils dd 8.24, dd doesn't support "status=progress"
- # and the option causes fusing failure. For backward compatibility,
- # do not use the option for old dd
- local version=(`dd --version | head -1 | grep -o '[0-9]\+'`)
- local major=${version[0]}
- local minor=${version[1]}
-
- if [ $major -lt 8 ]; then
- OLD_DD=1
- elif [ $major -eq 8 -a $minor -lt 24 ]; then
- OLD_DD=1
- fi
-}
-
-function fusing_image () {
- local -r fusing_img=$1
-
- # get binary info using basename
- get_index_use_name $(basename "$fusing_img")
- local -r -i part_idx=$?
-
- if [ $part_idx -ne $PART_TABLE_ROW ];then
- local -r num=${PART_TABLE[${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[${part_idx} * ${PART_TABLE_COL} + 2]}
- else
- echo "Unsupported binary: $fusing_img"
- return
- fi
-
- 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
-}
-
-function fuse_image_tarball () {
- local -r filepath=$1
- local -r temp_dir="tar_tmp"
-
- mkdir -p $temp_dir
- tar xvf $filepath -C $temp_dir
- cd $temp_dir
-
- for file in *
- do
- fusing_image $file
- done
-
- cd ..
- rm -rf $temp_dir
- eval sync
-}
-
-function fuse_image () {
-
- if [ "$FUSING_BINARY_NUM" == 0 ]; then
- return
- fi
-
- for ((fuse_idx = 0 ; fuse_idx < $FUSING_BINARY_NUM ; fuse_idx++))
- do
- local filename=${FUSING_BINARY_ARRAY[fuse_idx]}
-
- case "$filename" in
- *.tar | *.tar.gz)
- fuse_image_tarball $filename
- ;;
- *)
- fusing_image $filename
- ;;
- esac
- done
- echo ""
-}
-
-# partition format
-function mkpart_3 () {
- # NOTE: if your sfdisk version is less than 2.26.0, then you should use following sfdisk command:
- # sfdisk --in-order --Linux --unit M $DISK <<-__EOF__
-
- # NOTE: sfdisk 2.26 doesn't support units other than sectors and marks --unit option as deprecated.
- # The input data needs to contain multipliers (MiB) instead.
- local version=(`sfdisk -v | grep -o '[0-9]\+'`)
- local major=${version[0]}
- local minor=${version[1]}
- local sfdisk_new=0
- local support_delete=0
-
- 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
- fi
- fi
-
- if [ $sfdisk_new == 0 ]; then
- echo "$(tput setaf 3)$(tput bold)NOTICE: Your sfdisk ${version[0]}.${version[1]} version is too old. Update Latest sfdisk!"
- tput sgr 0
- exit -1
- fi
-
- local -r DISK=$DEVICE
- local -r SIZE=`sfdisk -s $DISK`
- local -r SIZE_MB=$((SIZE >> 10))
-
- local -r SPL_SZ=2
- local -r UBOOT_SZ=4
- local -r BOOT_SZ=292
- local -r ROOTFS_SZ=3072
- local -r DATA_SZ=1344
- local -r MODULE_SZ=32
- local -r RAMDISK_SZ=32
- local -r RAMDISK_RECOVERY_SZ=32
- local -r INFORM_SZ=8
- local -r HAL_SZ=256
- local -r PARAM_SZ=4
- local -r DATA_SIZE=1344
- local -r RESERVED1_SZ=64
- local -r RESERVED2_SZ=125
- local -r EXTEND_SZ=36
-
- let "USER_SZ = $SIZE_MB - $SPL_SZ - $UBOOT_SZ - $BOOT_SZ - $ROOTFS_SZ - $DATA_SZ - $MODULE_SZ - $RAMDISK_SZ - $RAMDISK_RECOVERY_SZ - $INFORM_SZ - $EXTEND_SZ - $HAL_SZ - $RESERVED1_SZ - $RESERVED2_SZ - $PARAM_SZ"
-
- local -r SPL=spl
- local -r UBOOT=uboot
- local -r BOOT_A=${PART_TABLE[0 * ${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_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_A=${PART_TABLE[7 * ${PART_TABLE_COL} + 3]}
- local -r RESERVED0=reserved0
- local -r RESERVED1=reserved1
- local -r RESERVED2=reserved2
-
- if [[ $USER_SZ -le 100 ]]
- then
- echo "We recommend to use more than 8GB disk"
- exit 0
- fi
-
- echo "================================================"
- echo "Label dev size"
- echo "================================================"
- echo $SPL" " $DISK"1 " $SPL_SZ "MB"
- echo $UBOOT" " $DISK"2 " $UBOOT_SZ "MB"
- echo $BOOT_A" " $DISK"3 " $BOOT_SZ "MB"
- echo "[Extend]"" " $DISK"4"
- echo " "$SYSTEMDATA" " $DISK"5 " $DATA_SZ "MB"
- echo " "$ROOTFS_A" " $DISK"6 " $ROOTFS_SZ "MB"
- echo " "$USER" " $DISK"7 " $USER_SZ "MB"
- echo " "$MODULE_A" " $DISK"8 " $MODULE_SZ "MB"
- echo " "$RAMDISK_A" " $DISK"9 " $RAMDISK_SZ "MB"
- echo " "$RAMDISK_RECOVERY_A" " $DISK"10 " $RAMDISK_RECOVERY_SZ "MB"
- echo " "$INFORM" " $DISK"11 " $INFORM_SZ "MB"
- echo " "$HAL_A" " $DISK"12 " $HAL_SZ "MB"
- echo " "$RESERVED0" " $DISK"13 " $PARAM_SZ "MB"
- echo " "$RESERVED1" " $DISK"14 " $RESERVED1_SZ "MB"
- echo " "$RESERVED2" " $DISK"15 " $RESERVED2_SZ "MB"
-
- local MOUNT_LIST=`mount | grep $DISK | awk '{print $1}'`
- for mnt in $MOUNT_LIST
- do
- umount $mnt
- done
-
- echo "Remove partition table..."
- dd if=/dev/zero of=$DISK bs=512 count=32 conv=notrunc
-
- if [ $support_delete == 1 ]; then
- sfdisk --delete $DISK
- fi
-
- SCRIPT=""
- for ((idx=0; idx < $PART_TABLE_ROW; idx++)); do
- NR=${PART_TABLE[idx * ${PART_TABLE_COL} + 1]}
- eval "PART_LABEL_NR_${NR}=${PART_TABLE[idx * ${PART_TABLE_COL} + 3]}"
- done
-
- sfdisk $DISK <<-__EOF__
- label: gpt
- start=4MiB, type= 2E54B353-1271-4842-806F-E436D6AF6985, size=${SPL_SZ}MiB, name=spl
- size=${UBOOT_SZ}MiB, type=5B193300-FC78-40CD-8002-E86C45580B47, name=uboot
- size=${BOOT_SZ}MiB, type= C12A7328-F81F-11D2-BA4B-00A0C93EC93B, name=${PART_LABEL_NR_3}
- size=${EXTEND_SZ}MiB, name=none
- size=${ROOTFS_SZ}MiB, name=${PART_LABEL_NR_5}
- size=${DATA_SZ}MiB, name=${PART_LABEL_NR_6}
- size=${USER_SZ}MiB, name=${PART_LABEL_NR_7}
- size=${MODULE_SZ}MiB, name=${PART_LABEL_NR_8}
- size=${RAMDISK_SZ}MiB, name=${PART_LABEL_NR_9}
- size=${RAMDISK_RECOVERY_SZ}MiB, name=${PART_LABEL_NR_10}
- size=${INFORM_SZ}MiB, name=inform
- size=${HAL_SZ}MiB, name=${PART_LABEL_NR_12}
- size=${PARAM_SZ}MiB, name=reserved0
- size=${RESERVED1_SZ}MiB, name=reserved1
- size=${RESERVED2_SZ}MiB, name=reserved2
- __EOF__
-
-
- for ((idx=0;idx<$PART_TABLE_ROW;idx++)); do
- local PART=/dev/`lsblk ${DISK} -o TYPE,KNAME | awk "/^part.*[a-z]${PART_TABLE[$idx * ${PART_TABLE_COL} + 1]}\$/ { print \\\$2 }"`
- if [ "${PART_TABLE[$idx * ${PART_TABLE_COL} + 4]}" == "vfat" ]; then
- mkfs.vfat -F 16 ${PART} -n ${PART_TABLE[$idx * ${PART_TABLE_COL} + 3]}
- if [ $? -eq 1 ]; then
- echo "Failed to format as FAT filesystem"
- exit -1
- fi
- elif [ "${PART_TABLE[$idx * ${PART_TABLE_COL} + 4]}" == "ext4" ]; then
- mkfs.ext4 -q ${PART} -L ${PART_TABLE[$idx * ${PART_TABLE_COL} + 3]} -F
- else
- echo "Skip to format for unknown filesystem type ${PART_TABLE[$idx * ${PART_TABLE_COL} + 4]} for part$idx, ${PART_TABLE[$idx * ${PART_TABLE_COL} + 3]}"
- fi
- done
-}
-
-function show_usage () {
- echo "- Usage:"
- echo " sudo ./sd_fusing*.sh -d <device> [-b <path> <path> ..] [--format] [--create]"
- echo " --create : create the backing file and format the loopback device"
- echo " -d : device node or loopback backing file"
- echo " -b : binary"
- echo " -s : size of the loopback device to create in MiB"
-}
-
-function check_partition_format () {
- if [ "$FORMAT" != "2" ]; then
- echo "-----------------------"
- echo "Skip $DEVICE format"
- echo "-----------------------"
- return 0
- fi
-
- echo "-------------------------------"
- echo "Start $DEVICE format"
- echo ""
- mkpart_3
- echo "End $DEVICE format"
- echo "-------------------------------"
- echo ""
-}
-
-function check_args () {
- if [ "$DEVICE" == "" ]; then
- echo "$(tput setaf 1)$(tput bold)- Device node is empty!"
- show_usage
- tput sgr 0
- exit 0
- fi
-
- if [ "$DEVICE" != "" ]; then
- echo "Device: $DEVICE"
- fi
-
- if [ "$FUSING_BINARY_NUM" != 0 ]; then
- echo "Fusing binary: "
- for ((bid = 0 ; bid < $FUSING_BINARY_NUM ; bid++))
- do
- echo " ${FUSING_BINARY_ARRAY[bid]}"
- done
- echo ""
- fi
-
- if [ "$FORMAT" == "1" ]; then
- echo ""
- echo -n "$(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
- FORMAT=2
- else
- FORMAT=0
- fi
- fi
-}
-
-function check_device () {
- if [ ! -e "$DEVICE" -a "$CREATE" == "1" ]; then
- dd if=/dev/zero of="$DEVICE" conv=sparse bs=1M count=$LOOP_SIZE
- if [ "$?" != "0" ]; then
- echo "Failed to create the backing file"
- exit -1
- fi
- fi
- if [ -f "$DEVICE" ]; then
- FILE="$DEVICE"
- DEVICE=$(losetup --partscan --show --find $FILE)
- if [ "$?" != "0" ]; then
- echo "Failed to set up the loopback device"
- exit -1
- fi
- fi
-
- if [ ! -b "$DEVICE" ]; then
- echo "No such device: $DEVICE"
- exit 0
- fi
-
- DEVICE=/dev/`lsblk $DEVICE -o TYPE,KNAME | awk '/^(disk|loop)/ { print $2 }'`
-
- local REMOVABLE=`lsblk $DEVICE -nd -o RM | grep 1 | wc -l`
- local LOOPBACK=`lsblk $DEVICE -nd -o TYPE | grep loop | wc -l`
- if [ "$REMOVABLE" == "0" -a "$LOOPBACK" == "0" ]; then
- echo ""
- echo -n "$(tput setaf 3)$(tput bold)$DEVICE is neither a removable disk nor a loopback, Is it OK? [y/<n>] "
- tput sgr 0
- read input
- if [ "$input" != "y" ] && [ "$input" != "Y" ]; then
- exit 0
- fi
- fi
-
- if [ ! -w "$DEVICE" ]; then
- echo "Write not permitted: $DEVICE"
- exit 0
- fi
-}
-
-function print_logo () {
- echo ""
- echo "For VisionFive2 and QEMU, version 1.1.0"
- echo ""
-}
-
-print_logo
-
-function add_fusing_binary() {
- local declare binary_name=$1
-
- if [ "$binary_name" != "" ]; then
- if [ -f "$binary_name" ]; then
- FUSING_BINARY_ARRAY[$FUSING_BINARY_NUM]=$binary_name
-
- FUSING_BINARY_NUM=$((FUSING_BINARY_NUM + 1))
- else
- echo "No such file: $binary_name"
- fi
- fi
-}
-
-
-declare -i binary_option=0
-
-while test $# -ne 0; do
- option=$1
- shift
-
- case $option in
- -c | --create)
- CREATE="1"
- set -- -f "${@}"
- binary_option=0
- ;;
- -f | --format)
- FORMAT="1"
- binary_option=0
- ;;
- -d)
- DEVICE=$1
- binary_option=0
- shift
- ;;
- -b)
- add_fusing_binary $1
- binary_option=1
- shift
- ;;
- -s)
- LOOP_SIZE=$1
- binary_option=0
- shift
- ;;
- *)
- if [ $binary_option == 1 ];then
- add_fusing_binary $option
- else
- echo "Unkown command: $option"
- exit
- fi
- ;;
- esac
-done
-
-print_message 3 "NOTICE: This script will be deprecated. Please use sd_fusing.py instead."
-echo
-
-check_args
-check_device
-check_partition_format
-check_ddversion
-fuse_image