1*53ee8cc1Swenshuai.xi#!/bin/sh 2*53ee8cc1Swenshuai.xi# ---------------------------------------------------------------------- 3*53ee8cc1Swenshuai.xi# extract-ikconfig - Extract the .config file from a kernel image 4*53ee8cc1Swenshuai.xi# 5*53ee8cc1Swenshuai.xi# This will only work when the kernel was compiled with CONFIG_IKCONFIG. 6*53ee8cc1Swenshuai.xi# 7*53ee8cc1Swenshuai.xi# The obscure use of the "tr" filter is to work around older versions of 8*53ee8cc1Swenshuai.xi# "grep" that report the byte offset of the line instead of the pattern. 9*53ee8cc1Swenshuai.xi# 10*53ee8cc1Swenshuai.xi# (c) 2009,2010 Dick Streefland <dick@streefland.net> 11*53ee8cc1Swenshuai.xi# Licensed under the terms of the GNU General Public License. 12*53ee8cc1Swenshuai.xi# ---------------------------------------------------------------------- 13*53ee8cc1Swenshuai.xi 14*53ee8cc1Swenshuai.xicf1='IKCFG_ST\037\213\010' 15*53ee8cc1Swenshuai.xicf2='0123456789' 16*53ee8cc1Swenshuai.xi 17*53ee8cc1Swenshuai.xidump_config() 18*53ee8cc1Swenshuai.xi{ 19*53ee8cc1Swenshuai.xi if pos=`tr "$cf1\n$cf2" "\n$cf2=" < "$1" | grep -abo "^$cf2"` 20*53ee8cc1Swenshuai.xi then 21*53ee8cc1Swenshuai.xi pos=${pos%%:*} 22*53ee8cc1Swenshuai.xi tail -c+$(($pos+8)) "$1" | zcat > $tmp1 2> /dev/null 23*53ee8cc1Swenshuai.xi if [ $? != 1 ] 24*53ee8cc1Swenshuai.xi then # exit status must be 0 or 2 (trailing garbage warning) 25*53ee8cc1Swenshuai.xi cat $tmp1 26*53ee8cc1Swenshuai.xi exit 0 27*53ee8cc1Swenshuai.xi fi 28*53ee8cc1Swenshuai.xi fi 29*53ee8cc1Swenshuai.xi} 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xitry_decompress() 32*53ee8cc1Swenshuai.xi{ 33*53ee8cc1Swenshuai.xi for pos in `tr "$1\n$2" "\n$2=" < "$img" | grep -abo "^$2"` 34*53ee8cc1Swenshuai.xi do 35*53ee8cc1Swenshuai.xi pos=${pos%%:*} 36*53ee8cc1Swenshuai.xi tail -c+$pos "$img" | $3 > $tmp2 2> /dev/null 37*53ee8cc1Swenshuai.xi dump_config $tmp2 38*53ee8cc1Swenshuai.xi done 39*53ee8cc1Swenshuai.xi} 40*53ee8cc1Swenshuai.xi 41*53ee8cc1Swenshuai.xi# Check invocation: 42*53ee8cc1Swenshuai.xime=${0##*/} 43*53ee8cc1Swenshuai.xiimg=$1 44*53ee8cc1Swenshuai.xiif [ $# -ne 1 -o ! -s "$img" ] 45*53ee8cc1Swenshuai.xithen 46*53ee8cc1Swenshuai.xi echo "Usage: $me <kernel-image>" >&2 47*53ee8cc1Swenshuai.xi exit 2 48*53ee8cc1Swenshuai.xifi 49*53ee8cc1Swenshuai.xi 50*53ee8cc1Swenshuai.xi# Prepare temp files: 51*53ee8cc1Swenshuai.xitmp1=/tmp/ikconfig$$.1 52*53ee8cc1Swenshuai.xitmp2=/tmp/ikconfig$$.2 53*53ee8cc1Swenshuai.xitrap "rm -f $tmp1 $tmp2" 0 54*53ee8cc1Swenshuai.xi 55*53ee8cc1Swenshuai.xi# Initial attempt for uncompressed images or objects: 56*53ee8cc1Swenshuai.xidump_config "$img" 57*53ee8cc1Swenshuai.xi 58*53ee8cc1Swenshuai.xi# That didn't work, so retry after decompression. 59*53ee8cc1Swenshuai.xitry_decompress '\037\213\010' xy gunzip 60*53ee8cc1Swenshuai.xitry_decompress '\3757zXZ\000' abcde unxz 61*53ee8cc1Swenshuai.xitry_decompress 'BZh' xy bunzip2 62*53ee8cc1Swenshuai.xitry_decompress '\135\0\0\0' xxx unlzma 63*53ee8cc1Swenshuai.xitry_decompress '\211\114\132' xy 'lzop -d' 64*53ee8cc1Swenshuai.xi 65*53ee8cc1Swenshuai.xi# Bail out: 66*53ee8cc1Swenshuai.xiecho "$me: Cannot find kernel config." >&2 67*53ee8cc1Swenshuai.xiexit 1 68