#!/bin/sh . $TOPDIR/scripts/functions.sh part="" ubootenv="" ubinize_param="" kernel="" rootfs="" outfile="" err="" ubinize_seq="" ubivol() { local volid="$1" local name="$2" local image="$3" local autoresize="$4" local size="$5" local voltype="${6:-dynamic}" echo "[$name]" echo "mode=ubi" echo "vol_id=$volid" echo "vol_type=$voltype" echo "vol_name=$name" if [ "$image" ]; then echo "image=$image" [ -n "$size" ] && echo "vol_size=${size}" else echo "vol_size=1MiB" fi if [ "$autoresize" ]; then echo "vol_flags=autoresize" fi } ubilayout() { local vol_id=0 local rootsize local autoresize local rootfs_type local voltype rootfs_type="$( get_fs_type "$2" )" if [ "$1" = "ubootenv" ]; then ubivol $vol_id ubootenv vol_id=$(( vol_id + 1 )) ubivol $vol_id ubootenv2 vol_id=$(( vol_id + 1 )) fi for part in $parts; do name="${part%%=*}" prev="$part" part="${part#*=}" voltype=dynamic [ "$prev" = "$part" ] && part= image="${part%%=*}" if [ "${image#:}" != "$image" ]; then voltype=static image="${image#:}" fi prev="$part" part="${part#*=}" [ "$prev" = "$part" ] && part= size="$part" if [ -z "$size" ]; then size="$( round_up "$( stat -c%s "$image" )" 1024 )" else size="${size}MiB" fi ubivol $vol_id "$name" "$image" "" "${size}" "$voltype" vol_id=$(( vol_id + 1 )) done if [ "$3" ]; then ubivol $vol_id kernel "$3" vol_id=$(( vol_id + 1 )) fi if [ "$2" ]; then case "$rootfs_type" in "ubifs") autoresize=1 ;; "squashfs") # squashfs uses 1k block size, ensure we do not # violate that rootsize="$( round_up "$( stat -c%s "$2" )" 1024 )" ;; esac ubivol $vol_id rootfs "$2" "$autoresize" "$rootsize" vol_id=$(( vol_id + 1 )) [ "$rootfs_type" = "ubifs" ] || ubivol $vol_id rootfs_data "" 1 fi } set_ubinize_seq() { if [ -n "$SOURCE_DATE_EPOCH" ] ; then ubinize_seq="-Q $SOURCE_DATE_EPOCH" fi } while [ "$1" ]; do case "$1" in "--uboot-env") ubootenv="ubootenv" shift continue ;; "--kernel") kernel="$2" shift shift continue ;; "--rootfs") rootfs="$2" shift shift continue ;; "--part") parts="$parts $2" shift shift continue ;; "-"*) ubinize_param="$*" break ;; *) if [ ! "$outfile" ]; then outfile=$1 shift continue fi ;; esac done if [ ! -r "$rootfs" ] && [ ! -r "$kernel" ] && [ ! "$parts" ] && [ ! "$outfile" ]; then echo "syntax: $0 [--uboot-env] [--part <name>=<file>] [--kernel kernelimage] [--rootfs rootfsimage] out [ubinize opts]" exit 1 fi ubinize="$( command -v ubinize )" if [ ! -x "$ubinize" ]; then echo "ubinize tool not found or not usable" exit 1 fi ubinizecfg="$( mktemp 2> /dev/null )" if [ -z "$ubinizecfg" ]; then # try OSX signature ubinizecfg="$( mktemp -t 'ubitmp' )" fi ubilayout "$ubootenv" "$rootfs" "$kernel" > "$ubinizecfg" set_ubinize_seq cat "$ubinizecfg" ubinize $ubinize_seq -o "$outfile" $ubinize_param "$ubinizecfg" err="$?" [ ! -e "$outfile" ] && err=2 rm "$ubinizecfg" exit $err