mk-emmc-fusing.sh 4.07 KB
#!/bin/bash

C_NC='\033[0m'
C_LRED='\033[1;31m'


EMMC_DEV_PATH="/dev/mmcblk3"
SD_DEV_PATH="/dev/mmcblk2"
PART1=p1
PART2=p2
PART3=p3
PART4=p4

FNAME_UBOOT="u-boot.imx"
FNAME_LOGO="init.bmp"
FNAME_DTB="imx6s-prime-oven.dtb"
FNAME_KERNEL="uImage"
FNAME_FSCPIO="ramdisk-prime_oven.uboot"
FNAME_RFS="rootfs.tar"
FNAME_APP="application.tar"

SD_MOUNT_PATH_P1="/tmp/mmcblk2p1"
EMMC_MOUNT_PATH_P1="/tmp/mmcblk3p1"
EMMC_MOUNT_PATH_P2="/tmp/mmcblk3p2"
EMMC_MOUNT_PATH_P3="/tmp/mmcblk3p3"
EMMC_MOUNT_PATH_P4="/tmp/mmcblk3p4"

function Init_Unmount()
{
	echo ""
	echo -e "${C_LRED}### UnMount - Init_Unmount() ### ${C_NC}"
	echo ""
	umount ${EMMC_DEV_PATH}${PART1}
	umount ${EMMC_DEV_PATH}${PART2}
	umount ${EMMC_DEV_PATH}${PART3}
	umount ${EMMC_DEV_PATH}${PART4}
	umount ${SD_DEV_PATH}${PART1}
	umount ${SD_DEV_PATH}${PART2}
}

function create_partition()
{
	echo ""
	echo -e "${C_LRED}### Fdisk Create Partition - create_partition() ###${C_NC}"
	echo ""
fdisk ${EMMC_DEV_PATH} << EOF
o
n
p
1
4096
8191
n
p
2
8192
16383
n
p
3
16384
32767
n
p
32768

p
w
EOF
}

function run_format()
{
	echo ""
	echo -e "${C_LRED}### Format eMMC - run_format() ###${C_NC}"
	echo ""
	mkfs.ext3    -F ${EMMC_DEV_PATH}${PART1} -L BOOT0
	mkfs.ext4 -j -F ${EMMC_DEV_PATH}${PART2} -L SYSTEM
	mkfs.ext4 -j -F ${EMMC_DEV_PATH}${PART3} -L FALINUX
	mkfs.ext4 -j -F ${EMMC_DEV_PATH}${PART4} -L PRIME
}

function run_mount()
{
	echo ""
	echo -e "${C_LRED}### Mount SD/eMMC - run_mount() ###${C_NC}"
	echo ""

	if [ ! -d ${SD_MOUNT_PATH_P1} ]; then
		mkdir ${SD_MOUNT_PATH_P1}
	fi

	if [ ! -d ${EMMC_MOUNT_PATH_P1} ]; then
		mkdir ${EMMC_MOUNT_PATH_P1}
	fi

	if [ ! -d ${EMMC_MOUNT_PATH_P2} ]; then
		mkdir ${EMMC_MOUNT_PATH_P2}
	fi

	if [ ! -d ${EMMC_MOUNT_PATH_P3} ]; then
		mkdir ${EMMC_MOUNT_PATH_P3}
	fi

	if [ ! -d ${EMMC_MOUNT_PATH_P4} ]; then
		mkdir ${EMMC_MOUNT_PATH_P4}
	fi

	mount -t ext4 ${SD_DEV_PATH}${PART1}  ${SD_MOUNT_PATH_P1}
	mount -t ext3 ${EMMC_DEV_PATH}${PART1}  ${EMMC_MOUNT_PATH_P1}
	mount -t ext4 ${EMMC_DEV_PATH}${PART2}  ${EMMC_MOUNT_PATH_P2}
	mount -t ext4 ${EMMC_DEV_PATH}${PART3}  ${EMMC_MOUNT_PATH_P3}
	mount -t ext4 ${EMMC_DEV_PATH}${PART4}  ${EMMC_MOUNT_PATH_P4}
}

function run_copy_image()
{
	echo ""
	echo -e "${C_LRED}### Write SD Boot Image - run_copy_image() ###${C_NC}"
	echo ""

	if [ ! -d ${EMMC_MOUNT_PATH_P1}/boot ]; then
		mkdir ${EMMC_MOUNT_PATH_P1}/boot
	fi

	cp -v ${SD_MOUNT_PATH_P1}/boot/${FNAME_UBOOT} ${EMMC_MOUNT_PATH_P1}/boot/
	cp -v ${SD_MOUNT_PATH_P1}/boot/${FNAME_LOGO} ${EMMC_MOUNT_PATH_P1}/boot/
	cp -v ${SD_MOUNT_PATH_P1}/boot/${FNAME_DTB} ${EMMC_MOUNT_PATH_P1}/boot/
	cp -v ${SD_MOUNT_PATH_P1}/boot/${FNAME_KERNEL} ${EMMC_MOUNT_PATH_P1}/boot/
	cp -v ${SD_MOUNT_PATH_P1}/boot/${FNAME_FSCPIO} ${EMMC_MOUNT_PATH_P1}/boot/
	run_copy_rootfs
	sleep 1
	sync
}

function run_copy_rootfs()
{
	echo ""
	echo -e "${C_LRED}### Make MMC Filesystem ###${C_NC}"
	echo ""

	tar -xf ${SD_MOUNT_PATH_P1}/boot/${FNAME_RFS} -C ${EMMC_MOUNT_PATH_P2}

	cp /etc/ssh/ssh_host_ed25519_key ${EMMC_MOUNT_PATH_P2}/etc/ssh/

	tar -xf ${SD_MOUNT_PATH_P1}/boot/${FNAME_APP} ${EMMC_MOUNT_PATH_P3}/
	tar -xf ${SD_MOUNT_PATH_P1}/boot/${FNAME_APP} ${EMMC_MOUNT_PATH_P4}/
}

function run_raw_write()
{
	echo ""
	echo -e "${C_LRED}### Write SD Boot Image to RAW - run_raw_write() ###${C_NC}"
	echo ""
	dd if=${SD_MOUNT_PATH_P1}/boot/${FNAME_UBOOT} of=${EMMC_DEV_PATH} bs=512 seek=2
	dd if=${SD_MOUNT_PATH_P1}/boot/${FNAME_LOGO} of=${EMMC_DEV_PATH} bs=512 seek=2048
	dd if=${SD_MOUNT_PATH_P1}/boot/${FNAME_DTB} of=${EMMC_DEV_PATH} bs=512 seek=11264
	dd if=${SD_MOUNT_PATH_P1}/boot/${FNAME_KERNEL} of=${EMMC_DEV_PATH} bs=512 seek=12288
	dd if=${SD_MOUNT_PATH_P1}/boot/${FNAME_FSCPIO} of=${EMMC_DEV_PATH} bs=512 seek=28672
	sleep 1
	sync
}

function run_umount()
{
	echo ""
	echo -e "${C_LRED}### UnMount - run_umount() ###${C_NC}"
	echo ""
	umount ${SD_MOUNT_PATH_P1}
	umount ${EMMC_MOUNT_PATH_P1}
	umount ${EMMC_MOUNT_PATH_P2}
	umount ${EMMC_MOUNT_PATH_P3}
	umount ${EMMC_MOUNT_PATH_P4}
}


function main()
{
	echo ""
	echo -e "${C_LRED}#### Start - main() ####${C_NC}"
	echo ""

	Init_Unmount
	create_partition
	run_format
	run_mount
	run_copy_image
	run_raw_write
	run_umount
}

main