Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/evbppc/compile Merge from uebayasi-xip:



details:   https://anonhg.NetBSD.org/src/rev/66679f0abb7b
branches:  trunk
changeset: 758510:66679f0abb7b
user:      uebayasi <uebayasi%NetBSD.org@localhost>
date:      Sat Nov 06 16:23:35 2010 +0000

description:
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.

diffstat:

 sys/arch/evbppc/compile/walnut-mkimg.sh |  76 +++++++++++++++++++++++++-------
 1 files changed, 58 insertions(+), 18 deletions(-)

diffs (98 lines):

diff -r e341000dbc0c -r 66679f0abb7b sys/arch/evbppc/compile/walnut-mkimg.sh
--- a/sys/arch/evbppc/compile/walnut-mkimg.sh   Sat Nov 06 16:03:23 2010 +0000
+++ b/sys/arch/evbppc/compile/walnut-mkimg.sh   Sat Nov 06 16:23:35 2010 +0000
@@ -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
+
+size=`stat -f '%z' ${input}.bin.$$`
+size=$(( ( $size + 511 ) / 512 ))
+
+enc()
+{
+       local _x=$1; shift
+       printf $( printf '\\x%x' $_x )
+}
 
-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}
+be32enc()
+{
+       local _x=$1; shift
+       enc $(( ( $_x >> 24 ) & 0xff ))
+       enc $(( ( $_x >> 16 ) & 0xff ))
+       enc $(( ( $_x >>  8 ) & 0xff ))
+       enc $(( ( $_x >>  0 ) & 0xff ))
+}
 
-cat ${kernel}.bin.$$ >> ${output}
+{
+       be32enc $magic
+       be32enc $start
+       be32enc $size
+       be32enc 0
+       be32enc $start
+       be32enc 0
+       be32enc 0
+       be32enc 0
+} > ${input}.hdr.$$
 
-rm -f ${kernel}.bin.$$
+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



Home | Main Index | Thread Index | Old Index