| #! /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 |