1#/bin/sh
2#
3# Copyright (C) 2011 OpenWrt.org
4#
5# This is free software, licensed under the GNU General Public License v2.
6# See /LICENSE for more information.
7#
8
9usage() {
10	echo "Usage: $0 <OM2P|OM5P|OM5PAC|MR600|MR900|MR1750> <out file path> <kernel path> <rootfs path>"
11	rm -f $CFG_OUT
12	exit 1
13}
14
15[ "$#" -lt 4 ] && usage
16
17CE_TYPE=$1
18CFG_OUT=$2
19KERNEL_PATH=$3
20ROOTFS_PATH=$4
21
22case $CE_TYPE in
23	OM2P)
24		MAX_PART_SIZE=7168
25		KERNEL_FLASH_ADDR=0x1c0000
26		FLASH_BS=262144
27		MD5_SKIP_BLOCKS=1
28		;;
29	OM5P|OM5PAC|MR600|MR900|MR1750)
30		MAX_PART_SIZE=7808
31		KERNEL_FLASH_ADDR=0xb0000
32		FLASH_BS=65536
33		MD5_SKIP_BLOCKS=4
34		;;
35	*)
36		echo "Error - unsupported ce type: $CE_TYPE"
37		exit 1
38		;;
39esac
40
41CHECK_BS=65536
42
43KERNEL_SIZE=$(stat -c%s "$KERNEL_PATH")
44KERNEL_MD5=$(md5=$(md5sum $KERNEL_PATH); echo ${md5%% *})
45KERNEL_SHA256=$(openssl dgst -sha256 $KERNEL_PATH | awk '{print $2}')
46KERNEL_PART_SIZE=$(size=$(($KERNEL_SIZE / $FLASH_BS)); [ $(($size * $FLASH_BS)) -lt $KERNEL_SIZE ] && size=$(($size + 1)); echo $(($size * $FLASH_BS / 1024)))
47
48ROOTFS_FLASH_ADDR=$(addr=$(($KERNEL_FLASH_ADDR + ($KERNEL_PART_SIZE * 1024))); printf "0x%x" $addr)
49ROOTFS_SIZE=$(stat -c%s "$ROOTFS_PATH")
50ROOTFS_CHECK_BLOCKS=$((($ROOTFS_SIZE / $CHECK_BS) - $MD5_SKIP_BLOCKS))
51ROOTFS_MD5=$(md5=$(dd if=$ROOTFS_PATH bs=$CHECK_BS count=$ROOTFS_CHECK_BLOCKS 2>&- | md5sum); echo ${md5%% *})
52ROOTFS_MD5_FULL=$(md5=$(md5sum $ROOTFS_PATH); echo ${md5%% *})
53ROOTFS_SHA256_FULL=$(openssl dgst -sha256 $ROOTFS_PATH | awk '{print $2}')
54ROOTFS_CHECK_SIZE=$(printf '0x%x' $(($ROOTFS_CHECK_BLOCKS * $CHECK_BS)))
55ROOTFS_PART_SIZE=$(($MAX_PART_SIZE - $KERNEL_PART_SIZE))
56
57cat << EOF > $CFG_OUT
58[vmlinux]
59filename=kernel
60md5sum=$KERNEL_MD5
61filemd5sum=$KERNEL_MD5
62filesha256sum=$KERNEL_SHA256
63flashaddr=$KERNEL_FLASH_ADDR
64checksize=0x0
65cmd_success=setenv bootseq 1,2; setenv kernel_size_1 $KERNEL_PART_SIZE; saveenv
66cmd_fail=reset
67
68[rootfs]
69filename=rootfs
70md5sum=$ROOTFS_MD5
71filemd5sum=$ROOTFS_MD5_FULL
72filesha256sum=$ROOTFS_SHA256_FULL
73flashaddr=$ROOTFS_FLASH_ADDR
74checksize=$ROOTFS_CHECK_SIZE
75cmd_success=setenv bootseq 1,2; setenv kernel_size_1 $KERNEL_PART_SIZE; setenv rootfs_size_1 $ROOTFS_PART_SIZE; saveenv
76cmd_fail=reset
77EOF
78