Merge from uebayasi-xip:
Support files other than kernel executables. For filesystem images, embed (not prepend) OpenBIOS image headers to the images, so that alignment is kept in the resulting files.
This commit is contained in:
parent
4cca618331
commit
739828825a
@ -1,36 +1,76 @@
|
||||
#!/bin/sh
|
||||
# $NetBSD: walnut-mkimg.sh,v 1.3 2005/12/11 12:17:11 christos Exp $
|
||||
# $NetBSD: walnut-mkimg.sh,v 1.4 2010/11/06 16:23:35 uebayasi Exp $
|
||||
|
||||
# Convert a kernel to an tftp image loadable by the IBM PowerPC OpenBIOS.
|
||||
# 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 kernel image 1>&2
|
||||
echo usage: $0 input image 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
kernel=$1; shift
|
||||
input=$1; shift
|
||||
output=$1; shift
|
||||
|
||||
: ${OBJDUMP=objdump}
|
||||
: ${OBJCOPY=objcopy}
|
||||
|
||||
start=`${OBJDUMP} -f ${kernel} | awk '/start address/ { print $NF }'`
|
||||
start=`printf "%d" $start`
|
||||
${OBJCOPY} -O binary ${kernel} ${kernel}.bin.$$
|
||||
size=`/bin/ls -l ${kernel}.bin.$$ | awk '{ printf "%d", ( $5 + 511 ) / 512 }'`
|
||||
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
|
||||
|
||||
printf "%d\n%d\n%d\n0\n%d\n0\n0\n0\n" $magic $start $size $start |
|
||||
awk '{
|
||||
printf "%c", int($0 / 256 / 256 / 256) % 256;
|
||||
printf "%c", int($0 / 256 / 256 ) % 256;
|
||||
printf "%c", int($0 / 256 ) % 256;
|
||||
printf "%c", int($0 ) % 256;
|
||||
}
|
||||
' > ${output}
|
||||
size=`stat -f '%z' ${input}.bin.$$`
|
||||
size=$(( ( $size + 511 ) / 512 ))
|
||||
|
||||
cat ${kernel}.bin.$$ >> ${output}
|
||||
enc()
|
||||
{
|
||||
local _x=$1; shift
|
||||
printf $( printf '\\x%x' $_x )
|
||||
}
|
||||
|
||||
rm -f ${kernel}.bin.$$
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user