STATUS_DIR="/opt/data/recovery"
VERSION_FILE="/opt/etc/version"
-flash_image() {
- echo "Flash new images..."
+flash_pre_image() {
+ echo "Flash images for update..."
DEVICE="/dev/mmcblk0"
- RAMDISK_PART=("ramdisk.img" "ramdisk" "1024")
- RECOVERY_PART=("ramdisk-recovery.img" "ramdisk2" "1024")
- RECOVERY_KERN=("zImage-recovery" "recovery" "1024")
-
-# Flash ramdisk partition
- /bin/tar xvfp $1 -C $FOTA_DIR ${RAMDISK_PART[0]}
- if [ ! -e "$FOTA_DIR/${RAMDISK_PART[0]}" ]; then
- echo "There is no ${RAMDISK_PART[0]}"
- else
- PART_NUM=$(partx -s $DEVICE | grep ${RAMDISK_PART[1]} | awk '{print $1}')
- echo "Flashing ${RAMDISK_PART[0]}..."
- dd if="$FOTA_DIR/${RAMDISK_PART[0]}" of="$DEVICE"p"$PART_NUM" bs="${RAMDISK_PART[2]}"
- rm -f $FOTA_DIR/${RAMDISK_PART[0]}
- fi
+ CONFIG_FILE="update.cfg"
-# Flash recovery partition
- /bin/tar xvfp $1 -C $FOTA_DIR ${RECOVERY_PART[0]}
- if [ ! -e "$FOTA_DIR/${RECOVERY_PART[0]}" ]; then
- echo "There is no ${RECOVERY_PART[0]}"
- else
- PART_NUM=$(partx -s $DEVICE | grep ${RECOVERY_PART[1]} | awk '{print $1}')
- echo "Flashing ${RECOVERY_PART[0]}..."
- dd if="$FOTA_DIR/${RECOVERY_PART[0]}" of="$DEVICE"p"$PART_NUM" bs="${RECOVERY_PART[2]}"
- rm -f $FOTA_DIR/${RECOVERY_PART[0]}
+ /bin/tar xvfp $1 -C "$FOTA_DIR" $CONFIG_FILE
+ if [ ! -e "$FOTA_DIR/$CONFIG_FILE" ]; then
+ echo "There is no $CONFIG_FILE"
+ return
fi
-# Flash recovery kernel
- /bin/tar xvfp $1 -C $FOTA_DIR ${RECOVERY_KERN[0]}
- if [ ! -e "$FOTA_DIR/${RECOVERY_KERN[0]}" ]; then
- echo "There is no ${RECOVERY_KERN[0]}"
- else
- PART_NUM=$(partx -s $DEVICE | grep ${RECOVERY_KERN[1]} | awk '{print $1}')
- echo "Flashing ${RECOVERY_KERN[0]}..."
- dd if="$FOTA_DIR/${RECOVERY_KERN[0]}" of="$DEVICE"p"$PART_NUM" bs="${RECOVERY_KERN[2]}"
- rm -f $FOTA_DIR/${RECOVERY_KERN[0]}
- fi
+ while read PART_NAME DELTA_NAME TYPE DEV OFFSET SIZE HASH1 HASH2
+ do
+ if [ "$TYPE" = "PRE_UA" ]; then
+ /bin/tar xvfp $1 -C $FOTA_DIR $DELTA_NAME
+ if [ ! -e "$FOTA_DIR/$DELTA_NAME" ]; then
+ echo "There is no delta for $PART_NAME"
+ continue
+ fi
+
+ EMMC_DEVICE="/dev/mmcblk0"
+ PART_NAME_L=$(echo $PART_NAME | /bin/tr '[:upper:]' '[:lower:]')
+ DEV_NUM=$(/sbin/partx -s $EMMC_DEVICE | grep $PART_NAME_L | \
+ { read NUM REST; echo $NUM; })
+ if [ -z "$DEV_NUM" ]; then
+ DEV_NUM=$(/sbin/blkid -L $PART_NAME_L -o device | \
+ sed 's/\/dev\/mmcblk0p//')
+ fi
+ if [ -z "$DEV_NUM" ]; then
+ echo "There is no partition for $PART_NAME"
+ continue
+ fi
+ DEV="${EMMC_DEVICE}p${DEV_NUM}"
+
+ echo "Flashing $DELTA_NAME..."
+ dd if="$FOTA_DIR/$DELTA_NAME" of="$DEV" bs=1024
+ rm -f $FOTA_DIR/$DELTA_NAME
+
+ # Remove updated partition from cfg
+ /bin/cat "$FOTA_DIR/$CONFIG_FILE" | /bin/sed /^$PART_NAME/d \
+ > "$FOTA_DIR/${CONFIG_FILE}_tmp"
+ /bin/mv "$FOTA_DIR/${CONFIG_FILE}_tmp" "$FOTA_DIR/$CONFIG_FILE"
+
+ /bin/tar --delete --file=$1 $CONFIG_FILE
+ /bin/tar rvf $1 -C $FOTA_DIR $CONFIG_FILE
+ fi
+ done < "$FOTA_DIR/$CONFIG_FILE"
}
write_version_info() {
write_version_info
fi
-# Flash new images
-# - This operation for Tizen 3.0
-flash_image $1
+# Flash images
+# - in case of some image was newly included
+# - in case of some image should be flashed before update
+flash_pre_image $1
# Extract delta.ua
echo "Extract delta.ua..."