X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=scripts%2Fubinize-image.sh;h=c6f8bcefe5e04bc3e3093873f593aa8ab0ada9f2;hb=8f6334eb947a2594da8a2b58cf7afdabb83fb5a0;hp=6762c22bc4a6e27a149b36953dcb02c4796a7d52;hpb=d1898b84c6f33c6c11acf1d4e068870146ea062e;p=oweals%2Fopenwrt.git diff --git a/scripts/ubinize-image.sh b/scripts/ubinize-image.sh index 6762c22bc4..c6f8bcefe5 100755 --- a/scripts/ubinize-image.sh +++ b/scripts/ubinize-image.sh @@ -1,27 +1,22 @@ #!/bin/sh +. $TOPDIR/scripts/functions.sh + +part="" ubootenv="" ubinize_param="" kernel="" rootfs="" outfile="" err="" - -get_magic_word() { - dd if=$1 bs=2 count=1 2>/dev/null | hexdump -v -n 2 -e '1/1 "%02x"' -} - -is_ubifs() { - if [ "$( get_magic_word $1 )" = "3118" ]; then - echo "1" - fi -} +ubinize_seq="" ubivol() { volid=$1 name=$2 image=$3 autoresize=$4 + size="$5" echo "[$name]" echo "mode=ubi" echo "vol_id=$volid" @@ -29,6 +24,7 @@ ubivol() { echo "vol_name=$name" if [ "$image" ]; then echo "image=$image" + [ -n "$size" ] && echo "vol_size=${size}" else echo "vol_size=1MiB" fi @@ -39,20 +35,57 @@ ubivol() { ubilayout() { local vol_id=0 - local root_is_ubifs="$( is_ubifs "$2" )" + local rootsize= + local autoresize= + local 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#*=}" + [ "$prev" = "$part" ] && part= + + image="${part%%=*}" + prev="$part" + part="${part#*=}" + [ "$prev" = "$part" ] && part= + + size="$part" + + ubivol $vol_id "$name" "$image" "" "${size}MiB" + vol_id=$(( $vol_id + 1 )) + done if [ "$3" ]; then ubivol $vol_id kernel "$3" vol_id=$(( $vol_id + 1 )) fi - ubivol $vol_id rootfs "$2" $root_is_ubifs + + 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 )) - [ "$root_is_ubifs" ] || ubivol $vol_id rootfs_data "" 1 + [ "$rootfs_type" = "ubifs" ] || ubivol $vol_id rootfs_data "" 1 +} + +set_ubinize_seq() { + if [ -n "$SOURCE_DATE_EPOCH" ] ; then + ubinize_seq="-Q $SOURCE_DATE_EPOCH" + fi } while [ "$1" ]; do @@ -68,6 +101,12 @@ while [ "$1" ]; do shift continue ;; + "--part") + parts="$parts $2" + shift + shift + continue + ;; "-"*) ubinize_param="$@" break @@ -88,7 +127,7 @@ while [ "$1" ]; do done if [ ! -r "$rootfs" -o ! -r "$kernel" -a ! "$outfile" ]; then - echo "syntax: $0 [--uboot-env] [--kernel kernelimage] rootfs out [ubinize opts]" + echo "syntax: $0 [--uboot-env] [--part =] [--kernel kernelimage] rootfs out [ubinize opts]" exit 1 fi @@ -98,14 +137,18 @@ if [ ! -x "$ubinize" ]; then exit 1 fi -ubinizecfg="$( mktemp )" +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 -o "$outfile" $ubinize_param "$ubinizecfg" +ubinize $ubinize_seq -o "$outfile" $ubinize_param "$ubinizecfg" err="$?" [ ! -e "$outfile" ] && err=2 rm "$ubinizecfg" exit $err -