b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame] | 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 | |
| 9 | usage() { |
| 10 | echo "Usage: $0 <OM2P|OM5P|OM5PAC|MR600|MR900|MR1750|A60|A42|A62|PA300|PA1200|PA2200> <out file path> <kernel path> <rootfs path>" |
| 11 | rm -f $CFG_OUT |
| 12 | exit 1 |
| 13 | } |
| 14 | |
| 15 | [ "$#" -lt 4 ] && usage |
| 16 | |
| 17 | CE_TYPE=$1 |
| 18 | CFG_OUT=$2 |
| 19 | KERNEL_PATH=$3 |
| 20 | ROOTFS_PATH=$4 |
| 21 | |
| 22 | case $CE_TYPE in |
| 23 | PA300|\ |
| 24 | OM2P) |
| 25 | MAX_PART_SIZE=7168 |
| 26 | KERNEL_FLASH_ADDR=0x1c0000 |
| 27 | SIZE_FACTOR=1 |
| 28 | SIZE_FORMAT="%d" |
| 29 | ;; |
| 30 | OM5P|OM5PAC|MR600|MR900|MR1750|A60) |
| 31 | MAX_PART_SIZE=7808 |
| 32 | KERNEL_FLASH_ADDR=0xb0000 |
| 33 | SIZE_FACTOR=1 |
| 34 | SIZE_FORMAT="%d" |
| 35 | ;; |
| 36 | A42|PA1200) |
| 37 | MAX_PART_SIZE=15616 |
| 38 | KERNEL_FLASH_ADDR=0x180000 |
| 39 | SIZE_FACTOR=1024 |
| 40 | SIZE_FORMAT="0x%08x" |
| 41 | ;; |
| 42 | A62|PA2200) |
| 43 | MAX_PART_SIZE=15552 |
| 44 | KERNEL_FLASH_ADDR=0x1a0000 |
| 45 | SIZE_FACTOR=1024 |
| 46 | SIZE_FORMAT="0x%08x" |
| 47 | ;; |
| 48 | *) |
| 49 | echo "Error - unsupported ce type: $CE_TYPE" |
| 50 | exit 1 |
| 51 | ;; |
| 52 | esac |
| 53 | |
| 54 | CHECK_BS=65536 |
| 55 | |
| 56 | KERNEL_SIZE=$(stat -c%s "$KERNEL_PATH") |
| 57 | KERNEL_MD5=$($MKHASH md5 $KERNEL_PATH) |
| 58 | KERNEL_SHA256=$($MKHASH sha256 $KERNEL_PATH) |
| 59 | KERNEL_PART_SIZE_KB=$((KERNEL_SIZE / 1024)) |
| 60 | KERNEL_PART_SIZE=$(printf $SIZE_FORMAT $(($KERNEL_PART_SIZE_KB * $SIZE_FACTOR))) |
| 61 | |
| 62 | ROOTFS_FLASH_ADDR=$(addr=$(($KERNEL_FLASH_ADDR + ($KERNEL_PART_SIZE_KB * 1024))); printf "0x%x" $addr) |
| 63 | ROOTFS_SIZE=$(stat -c%s "$ROOTFS_PATH") |
| 64 | ROOTFS_SQUASHFS_SIZE=$((ROOTFS_SIZE-4)) |
| 65 | ROOTFS_CHECK_BLOCKS=$((ROOTFS_SQUASHFS_SIZE / CHECK_BS)) |
| 66 | ROOTFS_MD5=$(dd if=$ROOTFS_PATH bs=$CHECK_BS count=$ROOTFS_CHECK_BLOCKS 2>&- | $MKHASH md5) |
| 67 | ROOTFS_MD5_FULL=$($MKHASH md5 $ROOTFS_PATH) |
| 68 | ROOTFS_SHA256_FULL=$($MKHASH sha256 $ROOTFS_PATH) |
| 69 | ROOTFS_CHECK_SIZE=$(printf '0x%x' $ROOTFS_SQUASHFS_SIZE) |
| 70 | ROOTFS_PART_SIZE_KB=$(($MAX_PART_SIZE - $KERNEL_PART_SIZE_KB)) |
| 71 | ROOTFS_PART_SIZE=$(printf $SIZE_FORMAT $(($ROOTFS_PART_SIZE_KB * $SIZE_FACTOR))) |
| 72 | |
| 73 | cat << EOF > $CFG_OUT |
| 74 | [vmlinux] |
| 75 | filename=kernel |
| 76 | md5sum=$KERNEL_MD5 |
| 77 | filemd5sum=$KERNEL_MD5 |
| 78 | filesha256sum=$KERNEL_SHA256 |
| 79 | flashaddr=$KERNEL_FLASH_ADDR |
| 80 | checksize=0x0 |
| 81 | cmd_success=setenv bootseq 1,2; setenv kernel_size_1 $KERNEL_PART_SIZE; saveenv |
| 82 | cmd_fail=reset |
| 83 | |
| 84 | [rootfs] |
| 85 | filename=rootfs |
| 86 | md5sum=$ROOTFS_MD5 |
| 87 | filemd5sum=$ROOTFS_MD5_FULL |
| 88 | filesha256sum=$ROOTFS_SHA256_FULL |
| 89 | flashaddr=$ROOTFS_FLASH_ADDR |
| 90 | checksize=$ROOTFS_CHECK_SIZE |
| 91 | cmd_success=setenv bootseq 1,2; setenv kernel_size_1 $KERNEL_PART_SIZE; setenv rootfs_size_1 $ROOTFS_PART_SIZE; saveenv |
| 92 | cmd_fail=reset |
| 93 | EOF |