om-fwupgradecfg-gen.sh 2.4 KB

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