Skip to contentSkip to conversation

New: extract-ikconfig only works with gzip'ed kernel images

Bugme-new Randy Dunlap 2 participants 2 messages Oct 10, 2010 – Oct 11, 2010 1 message not in the archive Kbuild

lore
Share & tools
lore
#1 lore raw
In reply to a message not in the archive

On Thu, 7 Oct 2010 17:06:32 GMT [email protected] wrote:

Hi Dick,

Please look at this kernel bugzilla entry.
Thanks.

Quoted 18 lines

https://bugzilla.kernel.org/show_bug.cgi?id=19852

               URL: https://bugs.gentoo.org/show_bug.cgi?id=340021
           Summary: extract-ikconfig only works with gzip'ed kernel images
           Product: Other
           Version: 2.5
          Platform: All
        OS/Version: Linux
              Tree: Mainline
            Status: NEW
          Severity: normal
          Priority: P1
         Component: Other
        AssignedTo: [email protected]
        ReportedBy: [email protected]
        Regression: No
Quoted 10 lines

When anything else then CONFIG_KERNEL_GZIP is selected e.g. CONFIG_KERNEL_BZIP2, the script extract-ikconfig fails with "extract-ikconfig:
Cannot find kernel config."
This should be either checked in the script or support for pther compression methods may be nice.

Signature · 3 lines
Configure bugmail: https://bugzilla.kernel.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

#2 lore raw

On Sunday 2010-10-10 10:19, Randy Dunlap wrote:

| On Thu, 7 Oct 2010 17:06:32 GMT [email protected] wrote:
| 
| Hi Dick,
| 
| Please look at this kernel bugzilla entry.
| Thanks.
| 
| > https://bugzilla.kernel.org/show_bug.cgi?id=19852
| > 
| >                URL: https://bugs.gentoo.org/show_bug.cgi?id=340021
| >            Summary: extract-ikconfig only works with gzip'ed kernel images
| >            Product: Other
| >            Version: 2.5
| >           Platform: All
| >         OS/Version: Linux
| >               Tree: Mainline
| >             Status: NEW
| >           Severity: normal
| >           Priority: P1
| >          Component: Other
| >         AssignedTo: [email protected]
| >         ReportedBy: [email protected]
| >         Regression: No
| > 
| > 
| > When anything else then CONFIG_KERNEL_GZIP is selected e.g.
| > CONFIG_KERNEL_BZIP2, the script extract-ikconfig fails with "extract-ikconfig:
| > Cannot find kernel config."
| > This should be either checked in the script or support for pther compression
| > methods may be nice.

Here is a patch to resolve this issue:

----------------------------------------------------------------------

Add support for kernels compressed with bzip2, lzma or lzo, in addition to gzip.

---

 scripts/extract-ikconfig |   41 +++++++++++++++++++++++++++--------------
 1 files changed, 27 insertions(+), 14 deletions(-)
scripts/extract-ikconfig +27 -14
index 37f30d3..d27589a 100755
@@ -7,12 +7,10 @@
 # The obscure use of the "tr" filter is to work around older versions of
 # "grep" that report the byte offset of the line instead of the pattern.
 #
-# (c) 2009, Dick Streefland <[email protected]>
+# (c) 2009,2010 Dick Streefland <[email protected]>
 # Licensed under the terms of the GNU General Public License.
 # ----------------------------------------------------------------------
 
-gz1='\037\213\010'
-gz2='01'
 cf1='IKCFG_ST\037\213\010'
 cf2='0123456789'
 
@@ -21,11 +19,25 @@ dump_config()
 	if	pos=`tr "$cf1\n$cf2" "\n$cf2=" < "$1" | grep -abo "^$cf2"`
 	then
 		pos=${pos%%:*}
-		tail -c+$(($pos+8)) "$1" | zcat -q
-		exit 0
+		tail -c+$(($pos+8)) "$1" | zcat > $tmp1 2> /dev/null
+		case	$? in
+		2)	# there will be a warning about trailing garbage
+			cat $tmp1
+			exit 0
+		esac
 	fi
 }
 
+try_decompress()
+{
+	for	pos in `tr "$1\n$2" "\n$2=" < "$img" | grep -abo "^$2"`
+	do
+		pos=${pos%%:*}
+		tail -c+$pos "$img" | $3 > $tmp2 2> /dev/null
+		dump_config $tmp2
+	done
+}
+
 # Check invocation:
 me=${0##*/}
 img=$1
@@ -35,18 +47,19 @@ then
 	exit 2
 fi
 
+# Prepare temp files:
+tmp1=/tmp/ikconfig$$.1
+tmp2=/tmp/ikconfig$$.2
+trap "rm -f $tmp1 $tmp2" 0
+
 # Initial attempt for uncompressed images or objects:
 dump_config "$img"
 
-# That didn't work, so decompress and try again:
-tmp=/tmp/ikconfig$$
-trap "rm -f $tmp" 0
-for	pos in `tr "$gz1\n$gz2" "\n$gz2=" < "$img" | grep -abo "^$gz2"`
-do
-	pos=${pos%%:*}
-	tail -c+$pos "$img" | zcat 2> /dev/null > $tmp
-	dump_config $tmp
-done
+# That didn't work, so retry after decompression.
+try_decompress '\037\213\010' xy  gunzip
+try_decompress 'BZh'          xy  bunzip2
+try_decompress '\135\0\0\0'   xxx unlzma
+try_decompress '\211\114\132' xy  'lzop -d'
 
 # Bail out:
 echo "$me: Cannot find kernel config." >&2