78 lines
1.3 KiB
Bash
78 lines
1.3 KiB
Bash
#!/bin/sh
|
|
# $NetBSD: walnut-mkimg.sh,v 1.5 2014/03/03 18:25:14 joerg Exp $
|
|
|
|
# Convert an input to a TFTP image loadable by the IBM PowerPC OpenBIOS.
|
|
|
|
magic=5394511 # IBM OpenBIOS magic number 0x0052504f
|
|
start=0
|
|
size=0
|
|
overwrite=0
|
|
|
|
if [ $# -ne 2 ] ; then
|
|
echo usage: $0 input image 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
input=$1; shift
|
|
output=$1; shift
|
|
|
|
: ${OBJDUMP=objdump}
|
|
: ${OBJCOPY=objcopy}
|
|
: ${STAT=stat}
|
|
|
|
file=$( file $input )
|
|
case $file in
|
|
*:\ ELF\ *)
|
|
start=`${OBJDUMP} -f ${input} | awk '/start address/ { print $NF }'`
|
|
start=`printf "%d" $start`
|
|
${OBJCOPY} -O binary ${input} ${input}.bin.$$
|
|
;;
|
|
*)
|
|
case $file in
|
|
*\ [Ff]ile\ [Ss]ystem*|*\ [Ff]ilesystem*)
|
|
overwrite=1
|
|
;;
|
|
esac
|
|
cp ${input} ${input}.bin.$$
|
|
;;
|
|
esac
|
|
|
|
size=$(${STAT} -f '%z' ${input}.bin.$$)
|
|
size=$(( ( $size + 511 ) / 512 ))
|
|
|
|
enc()
|
|
{
|
|
local _x=$1; shift
|
|
printf $( printf '\\x%x' $_x )
|
|
}
|
|
|
|
be32enc()
|
|
{
|
|
local _x=$1; shift
|
|
enc $(( ( $_x >> 24 ) & 0xff ))
|
|
enc $(( ( $_x >> 16 ) & 0xff ))
|
|
enc $(( ( $_x >> 8 ) & 0xff ))
|
|
enc $(( ( $_x >> 0 ) & 0xff ))
|
|
}
|
|
|
|
{
|
|
be32enc $magic
|
|
be32enc $start
|
|
be32enc $size
|
|
be32enc 0
|
|
be32enc $start
|
|
be32enc 0
|
|
be32enc 0
|
|
be32enc 0
|
|
} > ${input}.hdr.$$
|
|
|
|
if [ $overwrite = 0 ]; then
|
|
cat ${input}.hdr.$$ ${input}.bin.$$ > ${output}
|
|
else
|
|
cp ${input}.bin.$$ ${output}
|
|
dd if=${input}.hdr.$$ of=${output} conv=notrunc
|
|
fi
|
|
|
|
rm -f ${input}.hdr.$$ ${input}.bin.$$
|
|
exit
|