ubinize-image.sh 3.0 KB

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