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