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|MR600> <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	MR600)
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_PART_SIZE=$(size=$(($KERNEL_SIZE / $FLASH_BS)); [ $(($size * $FLASH_BS)) -lt $KERNEL_SIZE ] && size=$(($size + 1)); echo $(($size * $FLASH_BS / 1024)))
46
47ROOTFS_FLASH_ADDR=$(addr=$(($KERNEL_FLASH_ADDR + ($KERNEL_PART_SIZE * 1024))); printf "0x%x" $addr)
48ROOTFS_SIZE=$(stat -c%s "$ROOTFS_PATH")
49ROOTFS_CHECK_BLOCKS=$((($ROOTFS_SIZE / $CHECK_BS) - $MD5_SKIP_BLOCKS))
50ROOTFS_MD5=$(md5=$(dd if=$ROOTFS_PATH bs=$CHECK_BS count=$ROOTFS_CHECK_BLOCKS 2>&- | md5sum); echo ${md5%% *})
51ROOTFS_CHECK_SIZE=$(printf '0x%x' $(($ROOTFS_CHECK_BLOCKS * $CHECK_BS)))
52ROOTFS_PART_SIZE=$(($MAX_PART_SIZE - $KERNEL_PART_SIZE))
53
54cat << EOF > $CFG_OUT
55[vmlinux]
56filename=kernel
57md5sum=$KERNEL_MD5
58flashaddr=$KERNEL_FLASH_ADDR
59checksize=0x0
60cmd_success=setenv bootseq 1,2; setenv kernel_size_1 $KERNEL_PART_SIZE; saveenv
61cmd_fail=reset
62
63[rootfs]
64filename=rootfs
65md5sum=$ROOTFS_MD5
66flashaddr=$ROOTFS_FLASH_ADDR
67checksize=$ROOTFS_CHECK_SIZE
68cmd_success=setenv bootseq 1,2; setenv kernel_size_1 $KERNEL_PART_SIZE; setenv rootfs_size_1 $ROOTFS_PART_SIZE; saveenv
69cmd_fail=reset
70EOF
71