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