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