platform.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. REQUIRE_IMAGE_METADATA=1
  2. MTDSYSFS=/sys/class/mtd
  3. gemini_check_redboot_parts() {
  4. MTD1OF=`cat ${MTDSYSFS}/mtd1/offset`
  5. MTD2OF=`cat ${MTDSYSFS}/mtd2/offset`
  6. MTD3OF=`cat ${MTDSYSFS}/mtd3/offset`
  7. MTD4OF=`cat ${MTDSYSFS}/mtd4/offset`
  8. MTD1SZ=$((${MTD2OF} - ${MTD1OF}))
  9. MTD2SZ=$((${MTD3OF} - ${MTD2OF}))
  10. MTD3SZ=$((${MTD4OF} - ${MTD3OF}))
  11. ESZ=`cat ${MTDSYSFS}/mtd1/erasesize`
  12. if test ${ESZ} == 131072 ; then
  13. echo "MTD has 128kb EB size"
  14. else
  15. echo "MTD has wrong EB size!"
  16. fi
  17. KSZ=$(($ESZ * $2))
  18. RSZ=$(($ESZ * $3))
  19. ASZ=$(($ESZ * $4))
  20. NAME=`cat ${MTDSYSFS}/mtd1/name`
  21. if test "x${NAME}" == "xKern" ; then
  22. if test ${MTD1SZ} == ${KSZ} ; then
  23. echo "MTD1 Kern ${MTD1SZ} OK..."
  24. else
  25. echo "MTD1 is wrong size, aborting" >&2
  26. exit 1
  27. fi
  28. else
  29. echo "MTD1 has wrong name, aborting" >&2
  30. exit 1
  31. fi
  32. NAME=`cat ${MTDSYSFS}/mtd2/name`
  33. if test "x${NAME}" == "xRamdisk" ; then
  34. if test ${MTD2SZ} == ${RSZ} ; then
  35. echo "MTD2 Ramdisk ${MTD2SZ} OK..."
  36. else
  37. echo "MTD2 is at wrong offset, aborting" >&2
  38. exit 1
  39. fi
  40. else
  41. echo "MTD2 has wrong name, aborting" >&2
  42. exit 1
  43. fi
  44. NAME=`cat ${MTDSYSFS}/mtd3/name`
  45. if test "x${NAME}" == "xApplication" ; then
  46. if test ${MTD3SZ} == ${ASZ} ; then
  47. echo "MTD3 Application ${MTD3SZ} OK..."
  48. else
  49. echo "MTD3 is at wrong offset, aborting" >&2
  50. exit 1
  51. fi
  52. else
  53. echo "MTD3 has wrong name, aborting" >&2
  54. exit 1
  55. fi
  56. }
  57. # This converts the old RedBoot partitioning to the new shared
  58. # "firmware" partition.
  59. gemini_do_flat_redboot_upgrade() {
  60. ESZ=131072
  61. KSZ=$(($ESZ * $2))
  62. RSZ=$(($ESZ * $3))
  63. KRSZ=$(($KSZ + $RSZ))
  64. ASZ=$(($ESZ * $4))
  65. echo "Partition sizes: Kern ${KSZ}, Ramdisk ${RSZ}, Application ${ASZ}"
  66. echo "Extract Kern from flat image ${1}"
  67. echo "Write Kern from flat image ${1}"
  68. dd if="$1" bs=1 count=${KSZ} | mtd write - Kern
  69. echo "Write rd.gz from flat image ${1}"
  70. dd if="$1" bs=1 skip=${KSZ} count=${RSZ} | mtd write - Ramdisk
  71. echo "Write hddapp.tgz from flat image ${1}"
  72. dd if="$1" bs=1 skip=${KRSZ} count=${ASZ} | mtd write - Application
  73. }
  74. # Check if we have the new partition scheme, else do it the old
  75. # way.
  76. gemini_do_combined_upgrade() {
  77. NAME=`cat ${MTDSYSFS}/mtd1/name`
  78. if test "x${NAME}" == "xfirmware" ; then
  79. PART_NAME=firmware
  80. default_do_upgrade "$1"
  81. else
  82. gemini_check_redboot_parts "$1" $2 $3 $4
  83. gemini_do_flat_redboot_upgrade "$1" $2 $3 $4
  84. fi
  85. }
  86. platform_check_image() {
  87. local board=$(board_name)
  88. case "$board" in
  89. dlink,dir-685|\
  90. itian,sq201|\
  91. storlink,gemini324|\
  92. raidsonic,ib-4220-b|\
  93. verbatim,s08v1901-d1)
  94. return 0
  95. ;;
  96. esac
  97. echo "Sysupgrade is not yet supported on $board."
  98. return 1
  99. }
  100. platform_do_upgrade() {
  101. local board=$(board_name)
  102. case "$board" in
  103. dlink,dir-685)
  104. PART_NAME=firmware
  105. default_do_upgrade "$1"
  106. ;;
  107. raidsonic,ib-4220-b|\
  108. storlink,gemini324|\
  109. verbatim,s08v1901-d1)
  110. gemini_do_combined_upgrade "$1" 24 48 48
  111. ;;
  112. itian,sq201)
  113. gemini_do_combined_upgrade "$1" 16 48 48
  114. ;;
  115. esac
  116. }