123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- #!/bin/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
- }
- ubivol() {
- volid=$1
- name=$2
- image=$3
- autoresize=$4
- size="$5"
- echo "[$name]"
- echo "mode=ubi"
- echo "vol_id=$volid"
- echo "vol_type=dynamic"
- echo "vol_name=$name"
- if [ "$image" ]; then
- echo "image=$image"
- [ -n "$size" ] && echo "vol_size=${size}MiB"
- else
- echo "vol_size=1MiB"
- fi
- if [ "$autoresize" ]; then
- echo "vol_flags=autoresize"
- fi
- }
- ubilayout() {
- local vol_id=0
- local root_is_ubifs="$( is_ubifs "$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"
- 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
- vol_id=$(( $vol_id + 1 ))
- [ "$root_is_ubifs" ] || ubivol $vol_id rootfs_data "" 1
- }
- while [ "$1" ]; do
- case "$1" in
- "--uboot-env")
- ubootenv="ubootenv"
- shift
- continue
- ;;
- "--kernel")
- kernel="$2"
- shift
- shift
- continue
- ;;
- "--part")
- parts="$parts $2"
- shift
- shift
- continue
- ;;
- "-"*)
- ubinize_param="$@"
- break
- ;;
- *)
- if [ ! "$rootfs" ]; then
- rootfs=$1
- shift
- continue
- fi
- if [ ! "$outfile" ]; then
- outfile=$1
- shift
- continue
- fi
- ;;
- esac
- done
- if [ ! -r "$rootfs" -o ! -r "$kernel" -a ! "$outfile" ]; then
- echo "syntax: $0 [--uboot-env] [--part <name>=<file>] [--kernel kernelimage] rootfs out [ubinize opts]"
- exit 1
- fi
- ubinize="$( which 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"
- cat "$ubinizecfg"
- ubinize -o "$outfile" $ubinize_param "$ubinizecfg"
- err="$?"
- [ ! -e "$outfile" ] && err=2
- rm "$ubinizecfg"
- exit $err
|