xref: /utopia/UTPA2-700.0.x/projects/build/scripts/extract-ikconfig (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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