#! /bin/bash # extracts .config info from a [b]zImage file # uses: binoffset (new), dd, zcat, strings, grep # $arg1 is [b]zImage filename TMPFILE="" usage() { echo " usage: extract-ikconfig [b]zImage_filename" } clean_up() { if [ -z $ISCOMP ] then rm -f $TMPFILE fi } if [ $# -lt 1 ] then usage exit fi 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 PID=$$ # 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 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 fi echo "Kernel configuration written to $image.oldconfig.$PID" clean_up exit 0