linksys.sh 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #
  2. # Copyright (C) 2014-2015 OpenWrt.org
  3. #
  4. linksys_get_target_firmware() {
  5. local cur_boot_part mtd_ubi0
  6. cur_boot_part=`/usr/sbin/fw_printenv -n boot_part`
  7. if [ -z "${cur_boot_part}" ] ; then
  8. mtd_ubi0=$(cat /sys/devices/virtual/ubi/ubi0/mtd_num)
  9. case $(egrep ^mtd${mtd_ubi0}: /proc/mtd | cut -d '"' -f 2) in
  10. kernel1|rootfs1)
  11. cur_boot_part=1
  12. ;;
  13. kernel2|rootfs2)
  14. cur_boot_part=2
  15. ;;
  16. esac
  17. >&2 printf "Current boot_part='%s' selected from ubi0/mtd_num='%s'" \
  18. "${cur_boot_part}" "${mtd_ubi0}"
  19. fi
  20. case $cur_boot_part in
  21. 1)
  22. fw_setenv -s - <<-EOF
  23. boot_part 2
  24. bootcmd "run altnandboot"
  25. EOF
  26. printf "kernel2"
  27. return
  28. ;;
  29. 2)
  30. fw_setenv -s - <<-EOF
  31. boot_part 1
  32. bootcmd "run nandboot"
  33. EOF
  34. printf "kernel1"
  35. return
  36. ;;
  37. *)
  38. return
  39. ;;
  40. esac
  41. }
  42. linksys_get_root_magic() {
  43. (get_image "$@" | dd skip=786432 bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2>/dev/null
  44. }
  45. platform_do_upgrade_linksys() {
  46. local magic_long="$(get_magic_long "$1")"
  47. mkdir -p /var/lock
  48. local part_label="$(linksys_get_target_firmware)"
  49. touch /var/lock/fw_printenv.lock
  50. if [ ! -n "$part_label" ]
  51. then
  52. echo "cannot find target partition"
  53. exit 1
  54. fi
  55. local target_mtd=$(find_mtd_part $part_label)
  56. [ "$magic_long" = "73797375" ] && {
  57. CI_KERNPART="$part_label"
  58. if [ "$part_label" = "kernel1" ]
  59. then
  60. CI_UBIPART="rootfs1"
  61. else
  62. CI_UBIPART="rootfs2"
  63. fi
  64. nand_upgrade_tar "$1"
  65. }
  66. [ "$magic_long" = "27051956" -o "$magic_long" = "0000a0e1" ] && {
  67. # check firmwares' rootfs types
  68. local target_mtd=$(find_mtd_part $part_label)
  69. local oldroot="$(linksys_get_root_magic $target_mtd)"
  70. local newroot="$(linksys_get_root_magic "$1")"
  71. if [ "$newroot" = "55424923" -a "$oldroot" = "55424923" ]
  72. # we're upgrading from a firmware with UBI to one with UBI
  73. then
  74. # erase everything to be safe
  75. mtd erase $part_label
  76. get_image "$1" | mtd -n write - $part_label
  77. else
  78. get_image "$1" | mtd write - $part_label
  79. fi
  80. }
  81. }
  82. platform_copy_config_linksys() {
  83. cp -f "$UPGRADE_BACKUP" "/tmp/syscfg/$BACKUP_FILE"
  84. sync
  85. }