Home | History | Annotate | Line # | Download | only in compile
      1  1.1       scw #!/bin/sh
      2  1.6      maya # $NetBSD: walnut-mkimg.sh,v 1.6 2024/12/11 00:06:58 maya Exp $
      3  1.1       scw 
      4  1.4  uebayasi # 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.4  uebayasi start=0
      8  1.4  uebayasi size=0
      9  1.4  uebayasi overwrite=0
     10  1.1       scw 
     11  1.1       scw if [ $# -ne 2 ] ; then
     12  1.4  uebayasi 	echo usage: $0 input image 1>&2
     13  1.1       scw 	exit 1
     14  1.1       scw fi
     15  1.1       scw 
     16  1.4  uebayasi 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.5     joerg : ${STAT=stat}
     22  1.6      maya : ${AWK=awk}
     23  1.6      maya : ${FILE=file}
     24  1.1       scw 
     25  1.6      maya file=$( ${FILE} $input )
     26  1.4  uebayasi case $file in
     27  1.4  uebayasi *:\ ELF\ *)
     28  1.6      maya 	start=`${OBJDUMP} -f ${input} | ${AWK} '/start address/ { print $NF }'`
     29  1.4  uebayasi 	start=`printf "%d" $start`
     30  1.4  uebayasi 	${OBJCOPY} -O binary ${input} ${input}.bin.$$
     31  1.4  uebayasi 	;;
     32  1.4  uebayasi *)
     33  1.4  uebayasi 	case $file in
     34  1.4  uebayasi 	*\ [Ff]ile\ [Ss]ystem*|*\ [Ff]ilesystem*)
     35  1.4  uebayasi 		overwrite=1
     36  1.4  uebayasi 		;;
     37  1.4  uebayasi 	esac
     38  1.4  uebayasi 	cp ${input} ${input}.bin.$$
     39  1.4  uebayasi 	;;
     40  1.4  uebayasi esac
     41  1.4  uebayasi 
     42  1.5     joerg size=$(${STAT} -f '%z' ${input}.bin.$$)
     43  1.4  uebayasi size=$(( ( $size + 511 ) / 512 ))
     44  1.4  uebayasi 
     45  1.4  uebayasi enc()
     46  1.4  uebayasi {
     47  1.4  uebayasi 	local _x=$1; shift
     48  1.4  uebayasi 	printf $( printf '\\x%x' $_x )
     49  1.4  uebayasi }
     50  1.4  uebayasi 
     51  1.4  uebayasi be32enc()
     52  1.4  uebayasi {
     53  1.4  uebayasi 	local _x=$1; shift
     54  1.4  uebayasi 	enc $(( ( $_x >> 24 ) & 0xff ))
     55  1.4  uebayasi 	enc $(( ( $_x >> 16 ) & 0xff ))
     56  1.4  uebayasi 	enc $(( ( $_x >>  8 ) & 0xff ))
     57  1.4  uebayasi 	enc $(( ( $_x >>  0 ) & 0xff ))
     58  1.4  uebayasi }
     59  1.4  uebayasi 
     60  1.4  uebayasi {
     61  1.4  uebayasi 	be32enc $magic
     62  1.4  uebayasi 	be32enc $start
     63  1.4  uebayasi 	be32enc $size
     64  1.4  uebayasi 	be32enc 0
     65  1.4  uebayasi 	be32enc $start
     66  1.4  uebayasi 	be32enc 0
     67  1.4  uebayasi 	be32enc 0
     68  1.4  uebayasi 	be32enc 0
     69  1.4  uebayasi } > ${input}.hdr.$$
     70  1.4  uebayasi 
     71  1.4  uebayasi if [ $overwrite = 0 ]; then
     72  1.4  uebayasi 	cat ${input}.hdr.$$ ${input}.bin.$$ > ${output}
     73  1.4  uebayasi else
     74  1.4  uebayasi 	cp ${input}.bin.$$ ${output}
     75  1.4  uebayasi 	dd if=${input}.hdr.$$ of=${output} conv=notrunc
     76  1.4  uebayasi fi
     77  1.1       scw 
     78  1.4  uebayasi rm -f ${input}.hdr.$$ ${input}.bin.$$
     79  1.1       scw exit
     80