aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorAndrew Morton <akpm@osdl.org>2004-06-23 19:24:10 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-06-23 19:24:10 -0700
commit11e4e1e82c3de5869bfe18a46e2718cbdf586929 (patch)
treeebf482aeb921b924d16f397c3abaf668bded3cf5 /scripts
parent3224bf995b3a18f3c5b47fcb39ca1cc2caf143cf (diff)
downloadhistory-11e4e1e82c3de5869bfe18a46e2718cbdf586929.tar.gz
[PATCH] consolidate in-kernel configuration
From: Andy Whitcroft <apw@shadowen.org> Being able to recover the configuration from a kernel is very useful and it would be nice to default this option to Yes. Currently, to have the config available both from the image (using extract-ikconfig) and via /proc we keep two copies of the original .config in the kernel. One in plain text and one gzip compressed. This is not optimal. This patch removes the plain text version of the configuration and updates the extraction tools to locate and use the gzip'd version of the file. This has the added bonus of providing us with the exact same results in both cases, the original .config; including the comments. Signed-off-by: Andy Whitcroft <apw@shadowen.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/extract-ikconfig87
1 files changed, 49 insertions, 38 deletions
diff --git a/scripts/extract-ikconfig b/scripts/extract-ikconfig
index 8e526d3709660..d9f9f34b22abb 100755
--- a/scripts/extract-ikconfig
+++ b/scripts/extract-ikconfig
@@ -1,9 +1,31 @@
-#! /bin/bash
+#!/bin/sh
# extracts .config info from a [b]zImage file
# uses: binoffset (new), dd, zcat, strings, grep
# $arg1 is [b]zImage filename
-TMPFILE=""
+binoffset="./scripts/binoffset"
+
+IKCFG_ST="0x49 0x4b 0x43 0x46 0x47 0x5f 0x53 0x54"
+IKCFG_ED="0x49 0x4b 0x43 0x46 0x47 0x5f 0x45 0x44"
+function dump_config {
+ typeset file="$1"
+
+ start=`$binoffset $file $IKCFG_ST 2>/dev/null`
+ [ "$?" != "0" ] && start="-1"
+ if [ "$start" -eq "-1" ]; then
+ return
+ fi
+ end=`$binoffset $file $IKCFG_ED 2>/dev/null`
+
+ let start="$start + 8"
+ let size="$end - $start"
+
+ head --bytes="$end" "$file" | tail --bytes="$size" | zcat
+
+ clean_up
+ exit 0
+}
+
usage()
{
@@ -12,8 +34,7 @@ usage()
clean_up()
{
- if [ -z $ISCOMP ]
- then
+ if [ "$TMPFILE" != "" ]; then
rm -f $TMPFILE
fi
}
@@ -21,46 +42,36 @@ clean_up()
if [ $# -lt 1 ]
then
usage
- exit
+ exit 1
fi
-image=$1
+TMPFILE="/tmp/ikconfig-$$"
+image="$1"
-# There are two gzip headers, as well as arches which don't compress their
-# kernel.
-GZHDR="0x1f 0x8b 0x08 0x00"
-if [ `binoffset $image $GZHDR >/dev/null 2>&1 ; echo $?` -ne 0 ]
-then
- GZHDR="0x1f 0x8b 0x08 0x08"
- if [ `binoffset $image $GZHDR >/dev/null 2>&1 ; echo $?` -ne 0 ]
- then
- ISCOMP=0
- fi
-fi
+# vmlinux: Attempt to dump the configuration from the file directly
+dump_config "$image"
-PID=$$
+GZHDR1="0x1f 0x8b 0x08 0x00"
+GZHDR2="0x1f 0x8b 0x08 0x08"
-# Extract and uncompress the kernel image if necessary
-if [ -z $ISCOMP ]
-then
- TMPFILE="/tmp/`basename $image`.vmlin.$PID"
- dd if=$image bs=1 skip=`binoffset $image $GZHDR` 2> /dev/null | zcat > $TMPFILE
-else
- TMPFILE=$image
+# vmlinux.gz: Check for a compressed images
+off=`$binoffset "$image" $GZHDR1 2>/dev/null`
+[ "$?" != "0" ] && off="-1"
+if [ "$off" -eq "-1" ]; then
+ off=`$binoffset "$image" $GZHDR2 2>/dev/null`
+ [ "$?" != "0" ] && off="-1"
fi
-
-# Look for strings.
-strings $TMPFILE | grep "CONFIG_BEGIN=n" > /dev/null
-if [ $? -eq 0 ]
-then
- strings $TMPFILE | awk "/CONFIG_BEGIN=n/,/CONFIG_END=n/" > $image.oldconfig.$PID
-else
- echo "ERROR: Unable to extract kernel configuration information."
- echo " This kernel image may not have the config info."
- clean_up
- exit 1
+if [ "$off" -eq "0" ]; then
+ zcat <"$image" >"$TMPFILE"
+ dump_config "$TMPFILE"
+elif [ "$off" -ne "-1" ]; then
+ (dd ibs="$off" skip=1 count=0 && dd bs=512k) <"$image" 2>/dev/null | \
+ zcat >"$TMPFILE"
+ dump_config "$TMPFILE"
fi
-echo "Kernel configuration written to $image.oldconfig.$PID"
+echo "ERROR: Unable to extract kernel configuration information."
+echo " This kernel image may not have the config info."
+
clean_up
-exit 0
+exit 1