linksys.sh 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #
  2. # Copyright (C) 2014 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 $(grep -E ^mtd${mtd_ubi0}: /proc/mtd | cut -d '"' -f 2) in
  10. kernel|rootfs)
  11. cur_boot_part=1
  12. ;;
  13. alt_kernel|alt_rootfs)
  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. platform_do_upgrade_linksys() {
  43. local magic_long="$(get_magic_long "$1")"
  44. mkdir -p /var/lock
  45. local part_label="$(linksys_get_target_firmware)"
  46. touch /var/lock/fw_printenv.lock
  47. if [ ! -n "$part_label" ]
  48. then
  49. echo "cannot find target partition"
  50. exit 1
  51. fi
  52. local target_mtd=$(find_mtd_part $part_label)
  53. [ "$magic_long" = "73797375" ] && {
  54. CI_KERNPART="$part_label"
  55. if [ "$part_label" = "kernel1" ]
  56. then
  57. CI_UBIPART="rootfs1"
  58. else
  59. CI_UBIPART="rootfs2"
  60. fi
  61. nand_upgrade_tar "$1"
  62. }
  63. [ "$magic_long" = "27051956" ] && {
  64. get_image "$1" | mtd write - $part_label
  65. }
  66. }