ubinize-image.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. #!/bin/sh
  2. . $TOPDIR/scripts/functions.sh
  3. part=""
  4. ubootenv=""
  5. ubinize_param=""
  6. kernel=""
  7. rootfs=""
  8. outfile=""
  9. err=""
  10. ubinize_seq=""
  11. ubivol() {
  12. local volid=$1
  13. local name=$2
  14. local image=$3
  15. local autoresize=$4
  16. local size="$5"
  17. local voltype="${6:-dynamic}"
  18. echo "[$name]"
  19. echo "mode=ubi"
  20. echo "vol_id=$volid"
  21. echo "vol_type=$voltype"
  22. echo "vol_name=$name"
  23. if [ "$image" ]; then
  24. echo "image=$image"
  25. [ -n "$size" ] && echo "vol_size=${size}"
  26. else
  27. echo "vol_size=1MiB"
  28. fi
  29. if [ "$autoresize" ]; then
  30. echo "vol_flags=autoresize"
  31. fi
  32. }
  33. ubilayout() {
  34. local vol_id=0
  35. local rootsize=
  36. local autoresize=
  37. local rootfs_type="$( get_fs_type "$2" )"
  38. local voltype
  39. if [ "$1" = "ubootenv" ]; then
  40. ubivol $vol_id ubootenv
  41. vol_id=$(( $vol_id + 1 ))
  42. ubivol $vol_id ubootenv2
  43. vol_id=$(( $vol_id + 1 ))
  44. fi
  45. for part in $parts; do
  46. name="${part%%=*}"
  47. prev="$part"
  48. part="${part#*=}"
  49. voltype=dynamic
  50. [ "$prev" = "$part" ] && part=
  51. image="${part%%=*}"
  52. if [ "${image:0:1}" = ":" ]; then
  53. voltype=static
  54. image="${image:1}"
  55. fi
  56. prev="$part"
  57. part="${part#*=}"
  58. [ "$prev" = "$part" ] && part=
  59. size="$part"
  60. if [ -z "$size" ]; then
  61. size="$( round_up "$( stat -c%s "$image" )" 1024 )"
  62. else
  63. size="${size}MiB"
  64. fi
  65. ubivol $vol_id "$name" "$image" "" "${size}" "$voltype"
  66. vol_id=$(( $vol_id + 1 ))
  67. done
  68. if [ "$3" ]; then
  69. ubivol $vol_id kernel "$3"
  70. vol_id=$(( $vol_id + 1 ))
  71. fi
  72. if [ "$2" ]; then
  73. case "$rootfs_type" in
  74. "ubifs")
  75. autoresize=1
  76. ;;
  77. "squashfs")
  78. # squashfs uses 1k block size, ensure we do not
  79. # violate that
  80. rootsize="$( round_up "$( stat -c%s "$2" )" 1024 )"
  81. ;;
  82. esac
  83. ubivol $vol_id rootfs "$2" "$autoresize" "$rootsize" dynamic
  84. vol_id=$(( $vol_id + 1 ))
  85. [ "$rootfs_type" = "ubifs" ] || ubivol $vol_id rootfs_data "" 1 dymamic
  86. fi
  87. }
  88. set_ubinize_seq() {
  89. if [ -n "$SOURCE_DATE_EPOCH" ] ; then
  90. ubinize_seq="-Q $SOURCE_DATE_EPOCH"
  91. fi
  92. }
  93. while [ "$1" ]; do
  94. case "$1" in
  95. "--uboot-env")
  96. ubootenv="ubootenv"
  97. shift
  98. continue
  99. ;;
  100. "--kernel")
  101. kernel="$2"
  102. shift
  103. shift
  104. continue
  105. ;;
  106. "--rootfs")
  107. rootfs="$2"
  108. shift
  109. shift
  110. continue
  111. ;;
  112. "--part")
  113. parts="$parts $2"
  114. shift
  115. shift
  116. continue
  117. ;;
  118. "-"*)
  119. ubinize_param="$@"
  120. break
  121. ;;
  122. *)
  123. if [ ! "$outfile" ]; then
  124. outfile=$1
  125. shift
  126. continue
  127. fi
  128. ;;
  129. esac
  130. done
  131. if [ ! -r "$rootfs" -a ! -r "$kernel" -a ! "$outfile" ]; then
  132. echo "syntax: $0 [--uboot-env] [--part <name>=<file>] [--kernel kernelimage] [--rootfs rootfsimage] out [ubinize opts]"
  133. exit 1
  134. fi
  135. ubinize="$( command -v ubinize )"
  136. if [ ! -x "$ubinize" ]; then
  137. echo "ubinize tool not found or not usable"
  138. exit 1
  139. fi
  140. ubinizecfg="$( mktemp 2> /dev/null )"
  141. if [ -z "$ubinizecfg" ]; then
  142. # try OSX signature
  143. ubinizecfg="$( mktemp -t 'ubitmp' )"
  144. fi
  145. ubilayout "$ubootenv" "$rootfs" "$kernel" > "$ubinizecfg"
  146. set_ubinize_seq
  147. cat "$ubinizecfg"
  148. ubinize $ubinize_seq -o "$outfile" $ubinize_param "$ubinizecfg"
  149. err="$?"
  150. [ ! -e "$outfile" ] && err=2
  151. rm "$ubinizecfg"
  152. exit $err