1#!/bin/sh 2 3ubootenv="" 4ubinize_param="" 5kernel="" 6rootfs="" 7outfile="" 8err="" 9 10get_magic_word() { 11 dd if=$1 bs=2 count=1 2>/dev/null | hexdump -v -n 2 -e '1/1 "%02x"' 12} 13 14is_ubifs() { 15 if [ "$( get_magic_word $1 )" = "3118" ]; then 16 echo "1" 17 fi 18} 19 20ubivol() { 21 volid=$1 22 name=$2 23 image=$3 24 autoresize=$4 25 echo "[$name]" 26 echo "mode=ubi" 27 echo "vol_id=$volid" 28 echo "vol_type=dynamic" 29 echo "vol_name=$name" 30 if [ "$image" ]; then 31 echo "image=$image" 32 else 33 echo "vol_size=1MiB" 34 fi 35 if [ "$autoresize" ]; then 36 echo "vol_flags=autoresize" 37 fi 38} 39 40ubilayout() { 41 local vol_id=0 42 local root_is_ubifs="$( is_ubifs "$2" )" 43 if [ "$1" = "ubootenv" ]; then 44 ubivol $vol_id ubootenv 45 vol_id=$(( $vol_id + 1 )) 46 ubivol $vol_id ubootenv2 47 vol_id=$(( $vol_id + 1 )) 48 fi 49 if [ "$3" ]; then 50 ubivol $vol_id kernel "$3" 51 vol_id=$(( $vol_id + 1 )) 52 fi 53 ubivol $vol_id rootfs "$2" $root_is_ubifs 54 vol_id=$(( $vol_id + 1 )) 55 [ "$root_is_ubifs" ] || ubivol $vol_id rootfs_data "" 1 56} 57 58while [ "$1" ]; do 59 case "$1" in 60 "--uboot-env") 61 ubootenv="ubootenv" 62 shift 63 continue 64 ;; 65 "--kernel") 66 kernel="$2" 67 shift 68 shift 69 continue 70 ;; 71 "-"*) 72 ubinize_param="$@" 73 break 74 ;; 75 *) 76 if [ ! "$rootfs" ]; then 77 rootfs=$1 78 shift 79 continue 80 fi 81 if [ ! "$outfile" ]; then 82 outfile=$1 83 shift 84 continue 85 fi 86 ;; 87 esac 88done 89 90if [ ! -r "$rootfs" -o ! -r "$kernel" -a ! "$outfile" ]; then 91 echo "syntax: $0 [--uboot-env] [--kernel kernelimage] rootfs out [ubinize opts]" 92 exit 1 93fi 94 95ubinize="$( which ubinize )" 96if [ ! -x "$ubinize" ]; then 97 echo "ubinize tool not found or not usable" 98 exit 1 99fi 100 101ubinizecfg="$( mktemp 2> /dev/null )" 102if [ -z "$ubinizecfg" ]; then 103 # try OSX signature 104 ubinizecfg="$( mktemp -t 'ubitmp' )" 105fi 106ubilayout "$ubootenv" "$rootfs" "$kernel" > "$ubinizecfg" 107 108cat "$ubinizecfg" 109ubinize -o "$outfile" $ubinize_param "$ubinizecfg" 110err="$?" 111[ ! -e "$outfile" ] && err=2 112rm "$ubinizecfg" 113 114exit $err 115