Home | History | Annotate | Line # | Download | only in compile
walnut-mkimg.sh revision 1.3.100.1
      1        1.1     scw #!/bin/sh
      2  1.3.100.1   rmind # $NetBSD: walnut-mkimg.sh,v 1.3.100.1 2011/03/05 20:50:14 rmind Exp $
      3        1.1     scw 
      4  1.3.100.1   rmind # Convert an input to a TFTP image loadable by the IBM PowerPC OpenBIOS.
      5        1.2  simonb 
      6        1.2  simonb magic=5394511	# IBM OpenBIOS magic number 0x0052504f
      7  1.3.100.1   rmind start=0
      8  1.3.100.1   rmind size=0
      9  1.3.100.1   rmind overwrite=0
     10        1.1     scw 
     11        1.1     scw if [ $# -ne 2 ] ; then
     12  1.3.100.1   rmind 	echo usage: $0 input image 1>&2
     13        1.1     scw 	exit 1
     14        1.1     scw fi
     15        1.1     scw 
     16  1.3.100.1   rmind input=$1; shift
     17        1.1     scw output=$1; shift
     18        1.1     scw 
     19        1.1     scw : ${OBJDUMP=objdump}
     20        1.1     scw : ${OBJCOPY=objcopy}
     21        1.1     scw 
     22  1.3.100.1   rmind file=$( file $input )
     23  1.3.100.1   rmind case $file in
     24  1.3.100.1   rmind *:\ ELF\ *)
     25  1.3.100.1   rmind 	start=`${OBJDUMP} -f ${input} | awk '/start address/ { print $NF }'`
     26  1.3.100.1   rmind 	start=`printf "%d" $start`
     27  1.3.100.1   rmind 	${OBJCOPY} -O binary ${input} ${input}.bin.$$
     28  1.3.100.1   rmind 	;;
     29  1.3.100.1   rmind *)
     30  1.3.100.1   rmind 	case $file in
     31  1.3.100.1   rmind 	*\ [Ff]ile\ [Ss]ystem*|*\ [Ff]ilesystem*)
     32  1.3.100.1   rmind 		overwrite=1
     33  1.3.100.1   rmind 		;;
     34  1.3.100.1   rmind 	esac
     35  1.3.100.1   rmind 	cp ${input} ${input}.bin.$$
     36  1.3.100.1   rmind 	;;
     37  1.3.100.1   rmind esac
     38  1.3.100.1   rmind 
     39  1.3.100.1   rmind size=`stat -f '%z' ${input}.bin.$$`
     40  1.3.100.1   rmind size=$(( ( $size + 511 ) / 512 ))
     41  1.3.100.1   rmind 
     42  1.3.100.1   rmind enc()
     43  1.3.100.1   rmind {
     44  1.3.100.1   rmind 	local _x=$1; shift
     45  1.3.100.1   rmind 	printf $( printf '\\x%x' $_x )
     46  1.3.100.1   rmind }
     47  1.3.100.1   rmind 
     48  1.3.100.1   rmind be32enc()
     49  1.3.100.1   rmind {
     50  1.3.100.1   rmind 	local _x=$1; shift
     51  1.3.100.1   rmind 	enc $(( ( $_x >> 24 ) & 0xff ))
     52  1.3.100.1   rmind 	enc $(( ( $_x >> 16 ) & 0xff ))
     53  1.3.100.1   rmind 	enc $(( ( $_x >>  8 ) & 0xff ))
     54  1.3.100.1   rmind 	enc $(( ( $_x >>  0 ) & 0xff ))
     55  1.3.100.1   rmind }
     56  1.3.100.1   rmind 
     57  1.3.100.1   rmind {
     58  1.3.100.1   rmind 	be32enc $magic
     59  1.3.100.1   rmind 	be32enc $start
     60  1.3.100.1   rmind 	be32enc $size
     61  1.3.100.1   rmind 	be32enc 0
     62  1.3.100.1   rmind 	be32enc $start
     63  1.3.100.1   rmind 	be32enc 0
     64  1.3.100.1   rmind 	be32enc 0
     65  1.3.100.1   rmind 	be32enc 0
     66  1.3.100.1   rmind } > ${input}.hdr.$$
     67  1.3.100.1   rmind 
     68  1.3.100.1   rmind if [ $overwrite = 0 ]; then
     69  1.3.100.1   rmind 	cat ${input}.hdr.$$ ${input}.bin.$$ > ${output}
     70  1.3.100.1   rmind else
     71  1.3.100.1   rmind 	cp ${input}.bin.$$ ${output}
     72  1.3.100.1   rmind 	dd if=${input}.hdr.$$ of=${output} conv=notrunc
     73  1.3.100.1   rmind fi
     74        1.1     scw 
     75  1.3.100.1   rmind rm -f ${input}.hdr.$$ ${input}.bin.$$
     76        1.1     scw exit
     77