aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorRafal Jaworowski <raj@FreeBSD.org>2008-02-05 10:46:30 +0000
committerRafal Jaworowski <raj@FreeBSD.org>2008-02-05 10:46:30 +0000
commitfcfdd827d0d04600776a3c4ebce5d05685386766 (patch)
treec4c9a9943432aae255fe95e78ba8063b382a46cc /sys
parent72c6438b52269852e1eb0a406311709da2ab2e5b (diff)
downloadsrc-fcfdd827d0d04600776a3c4ebce5d05685386766.tar.gz
src-fcfdd827d0d04600776a3c4ebce5d05685386766.zip
Introduce a standalone shell script for embedding MFS image.
This allows to fix a problem with ARM kernel.bin not having the MFS image embedded: it is objcopied from the kernel.noheader temporary ELF file, which was not subject to embedding the MFS image previously. Reviewed by: imp Approved by: cognet (mentor)
Notes
Notes: svn path=/head/; revision=175984
Diffstat (limited to 'sys')
-rw-r--r--sys/conf/Makefile.arm4
-rw-r--r--sys/conf/kern.post.mk8
-rw-r--r--sys/tools/embed_mfs.sh39
3 files changed, 44 insertions, 7 deletions
diff --git a/sys/conf/Makefile.arm b/sys/conf/Makefile.arm
index 4ac4a07bb943..574d422b6d9d 100644
--- a/sys/conf/Makefile.arm
+++ b/sys/conf/Makefile.arm
@@ -63,6 +63,10 @@ SYSTEM_LD_TAIL +=;sed s/" + SIZEOF_HEADERS"// ldscript.$M\
${KERNEL_KO}.bin; \
rm ${FULLKERNEL}.noheader
+.if defined(MFS_IMAGE)
+SYSTEM_LD_TAIL += ;sh ${S}/tools/embed_mfs.sh ${KERNEL_KO}.bin ${MFS_IMAGE};
+.endif
+
FILES_CPU_FUNC = $S/$M/$M/cpufunc_asm_arm7tdmi.S \
$S/$M/$M/cpufunc_asm_arm8.S $S/$M/$M/cpufunc_asm_arm9.S \
$S/$M/$M/cpufunc_asm_sa1.S $S/$M/$M/cpufunc_asm_arm10.S \
diff --git a/sys/conf/kern.post.mk b/sys/conf/kern.post.mk
index 1eca596c1694..dbd678a214d6 100644
--- a/sys/conf/kern.post.mk
+++ b/sys/conf/kern.post.mk
@@ -91,13 +91,7 @@ ${FULLKERNEL}: ${SYSTEM_DEP} vers.o
.endif
${SYSTEM_LD_TAIL}
.if defined(MFS_IMAGE)
- @dd if="${MFS_IMAGE}" ibs=8192 of="${FULLKERNEL}" \
- obs=`strings -at d "${FULLKERNEL}" | \
- grep "MFS Filesystem goes here" | awk '{print $$1}'` \
- oseek=1 conv=notrunc 2>/dev/null && \
- strings ${FULLKERNEL} | \
- grep 'MFS Filesystem had better STOP here' > /dev/null || \
- (rm ${FULLKERNEL} && echo 'MFS image too large' && false)
+ @sh ${S}/tools/embed_mfs.sh ${FULLKERNEL} ${MFS_IMAGE}
.endif
.if !exists(${.OBJDIR}/.depend)
diff --git a/sys/tools/embed_mfs.sh b/sys/tools/embed_mfs.sh
new file mode 100644
index 000000000000..785cf3f81bc0
--- /dev/null
+++ b/sys/tools/embed_mfs.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+#
+# Copyright (C) 2008 The FreeBSD Project. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+# Embed the MFS image into the kernel body (expects space reserved via
+# MD_ROOT_SIZE)
+#
+# $1: kernel filename
+# $2: MFS image filename
+#
+
+obs=`strings -at d $1 | grep "MFS Filesystem goes here" | awk '{print $1}'`
+dd if=$2 ibs=8192 of=$1 obs=${obs} oseek=1 conv=notrunc 2> /dev/null
+
+strings $1 | grep 'MFS Filesystem had better STOP here' > /dev/null || \
+ (rm $1 && echo "MFS image too large" && false)