#!/bin/sh
#####################################################################
#
# chgki
#
# Shell script to change kernel on flash memory
#
# 2016/02/12
#
##################################################################### 
source /etc/profile

KERNEL_MTD="pri"
MTD_ERASE="flash_eraseall"
MTD_WRITE="upgrade_partition"
MTD_CMDLINE_OPTION="cmd"

##############################################
## check whether files exist
##############################################
check_kernel_file()
{
	if [ ! -r ${KERNEL_IMAGE_PATH} ] ; then
		echo "can't find Kernel image:${KERNEL_IMAGE_PATH}"
		exit 1
	fi
}

##############################################
##  check kernel size
##############################################
check_kernel_size()
{
	KERNEL_MTD_NUM=`cat /proc/mtd | grep ${KERNEL_MTD} | awk '{print $1}' | sed -e s/://`
	echo "${KERNEL_MTD} is ${KERNEL_MTD_NUM}"

	KERNEL_SIZE=`cat /proc/mtd | grep ${KERNEL_MTD} | awk '{print $2}'`
	echo $((KERNEL_SIZE=0x${KERNEL_SIZE}))
	KERNEL_SIZE=`expr ${KERNEL_SIZE} / 1024 / 1024`

	echo "${KERNEL_MTD} size is ${KERNEL_SIZE} M"

	KERNEL_IMAGE_SIZE=`du -m ${KERNEL_IMAGE_PATH} | awk '{print $1}'`
	echo "${KERNEL_IMAGE_PATH} size is ${KERNEL_IMAGE_SIZE} M"

	if [ ${KERNEL_IMAGE_SIZE} -gt ${KERNEL_SIZE} ] ; then
		echo "${KERNEL_IMAGE_PATH} is larger than the partition size"
		exit 1
	fi
}

##############################################
##  update kernel image
##############################################
updatea_kernel_image()
{
	KERNEL_MTD_NUM=`cat /proc/mtd | grep ${KERNEL_MTD} | awk '{print $1}' | sed -e s/://`
	echo "${KERNEL_MTD} is ${KERNEL_MTD_NUM}"
	${MTD_ERASE} /dev/${KERNEL_MTD_NUM}
	echo "${MTD_WRITE} -q -p -K /dev/${KERNEL_MTD_NUM} ${KERNEL_IMAGE_PATH}"
	${MTD_WRITE} -q -p -K /dev/${KERNEL_MTD_NUM} ${KERNEL_IMAGE_PATH}
}

##############################################
## update kernel function
##############################################
update_kernel()
{
	check_kernel_file
	check_kernel_size
	updatea_kernel_image
}

DEFAULT_KERNEL_IMAGE_PATH="zImage"
if [ "$1" == "" ] ; then
	echo "usage:$0 [Kernel full image]"
	echo "example:"
	
	exit 1
else
	if [ "$1" == "--default" ] ; then
		KERNEL_IMAGE_PATH=${DEFAULT_KERNEL_IMAGE_PATH}
		# ROOTFS_IMAGE_PATH=${DEFAULT_ROOTFS_IMAGE_PATH}
	else
		KERNEL_IMAGE_PATH=`realpath $1`
	fi
fi

update_kernel