public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: "H. Peter Anvin" <hpa@zytor.com>,
	Andrew Boie <andrew.p.boie@intel.com>,
	linux-kernel@vger.kernel.org
Cc: tglx@linutronix.de, mmarek@suse.cz
Subject: Re: [PATCH 1/1] x86: boot: support minigzip bzImage compression
Date: Tue, 22 Oct 2013 19:53:18 -0700	[thread overview]
Message-ID: <52673A1E.60005@roeck-us.net> (raw)
In-Reply-To: <e7a2d995-e90f-4912-a0b9-4cf5725b246b@email.android.com>

On 10/22/2013 05:26 PM, H. Peter Anvin wrote:
> Wouldn't it be better to fix gzip than hacking around this in the kernel?
>
Or just change the build system to have /bin/gzip point to minigzip if so
desired. I have done the same to replace it with pigz.
Debian/Ubuntu provides the update-alternatives command for that
purpose. If that is not available, just hard-link it.

In general, I don't think it would be a good idea to add tool variant
dependencies like this one to the kernel configuration.

Guenter

> Andrew Boie <andrew.p.boie@intel.com> wrote:
>> Android OTA system computes very efficient diffs of compressed files
>> if the deflate() algorithm it has access to is the same version as
>> used to create the original file. Here we add support for compressing
>> the kernel with 'minigzip' which uses the deflate() inside zlib.
>> This is much better than using 'gzip' as that tool has a very old
>> version of deflate() inside the gzip codebase instead of linking
>> against
>> zlib.
>>
>> Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
>> ---
>> arch/x86/Kconfig                  |  1 +
>> arch/x86/boot/compressed/Makefile |  3 +++
>> arch/x86/boot/compressed/misc.c   |  2 +-
>> init/Kconfig                      | 18 +++++++++++++++++-
>> scripts/Makefile.lib              |  7 +++++++
>> 5 files changed, 29 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
>> index f67e839..aa91cef 100644
>> --- a/arch/x86/Kconfig
>> +++ b/arch/x86/Kconfig
>> @@ -62,6 +62,7 @@ config X86
>> 	select HAVE_REGS_AND_STACK_ACCESS_API
>> 	select HAVE_DMA_API_DEBUG
>> 	select HAVE_KERNEL_GZIP
>> +	select HAVE_KERNEL_MINIGZIP
>> 	select HAVE_KERNEL_BZIP2
>> 	select HAVE_KERNEL_LZMA
>> 	select HAVE_KERNEL_XZ
>> diff --git a/arch/x86/boot/compressed/Makefile
>> b/arch/x86/boot/compressed/Makefile
>> index dcd90df..f000791 100644
>> --- a/arch/x86/boot/compressed/Makefile
>> +++ b/arch/x86/boot/compressed/Makefile
>> @@ -56,6 +56,8 @@ vmlinux.bin.all-$(CONFIG_X86_NEED_RELOCS) +=
>> $(obj)/vmlinux.relocs
>>
>> $(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
>> 	$(call if_changed,gzip)
>> +$(obj)/vmlinux.bin.mgz: $(vmlinux.bin.all-y) FORCE
>> +	$(call if_changed,minigzip)
>> $(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE
>> 	$(call if_changed,bzip2)
>> $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE
>> @@ -68,6 +70,7 @@ $(obj)/vmlinux.bin.lz4: $(vmlinux.bin.all-y) FORCE
>> 	$(call if_changed,lz4)
>>
>> suffix-$(CONFIG_KERNEL_GZIP)	:= gz
>> +suffix-$(CONFIG_KERNEL_MINIGZIP):= mgz
>> suffix-$(CONFIG_KERNEL_BZIP2)	:= bz2
>> suffix-$(CONFIG_KERNEL_LZMA)	:= lzma
>> suffix-$(CONFIG_KERNEL_XZ)	:= xz
>> diff --git a/arch/x86/boot/compressed/misc.c
>> b/arch/x86/boot/compressed/misc.c
>> index 434f077..4e55d32 100644
>> --- a/arch/x86/boot/compressed/misc.c
>> +++ b/arch/x86/boot/compressed/misc.c
>> @@ -125,7 +125,7 @@ static char *vidmem;
>> static int vidport;
>> static int lines, cols;
>>
>> -#ifdef CONFIG_KERNEL_GZIP
>> +#if defined(CONFIG_KERNEL_GZIP) || defined(CONFIG_KERNEL_MINIGZIP)
>> #include "../../../../lib/decompress_inflate.c"
>> #endif
>>
>> diff --git a/init/Kconfig b/init/Kconfig
>> index 3ecd8a1..818f225 100644
>> --- a/init/Kconfig
>> +++ b/init/Kconfig
>> @@ -100,6 +100,9 @@ config LOCALVERSION_AUTO
>> config HAVE_KERNEL_GZIP
>> 	bool
>>
>> +config HAVE_KERNEL_MINIGZIP
>> +	bool
>> +
>> config HAVE_KERNEL_BZIP2
>> 	bool
>>
>> @@ -118,7 +121,7 @@ config HAVE_KERNEL_LZ4
>> choice
>> 	prompt "Kernel compression mode"
>> 	default KERNEL_GZIP
>> -	depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA
>> || HAVE_KERNEL_XZ || HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4
>> +	depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_MINIGZIP ||
>> HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_XZ ||
>> HAVE_KERNEL_LZO || HAVE_KERNEL_LZ4
>> 	help
>> 	  The linux kernel is a kind of self-extracting executable.
>> 	  Several compression algorithms are available, which differ
>> @@ -144,6 +147,19 @@ config KERNEL_GZIP
>> 	  The old and tried gzip compression. It provides a good balance
>> 	  between compression ratio and decompression speed.
>>
>> +config KERNEL_MINIGZIP
>> +	bool "Minigzip"
>> +	depends on HAVE_KERNEL_MINIGZIP
>> +	help
>> +	  Use minigzip to compress the bzImage. This is very similar to gzip
>> +	  but uses the zlib library to compress, rather than the very old
>> version
>> +	  of zlib inside the gzip codebase. This is used for Android kernels
>> +	  so that the same version of the deflate() algorithm is used when
>> +	  building the kernel and constructing diffs with OTA applypatch,
>> which
>> +	  uncompresses sections of files that it detects are gzipped before
>> computing
>> +	  the diffs. If the versions of deflate() are out of alignment the
>> binary
>> +	  diffs tend to be very large.
>> +
>> config KERNEL_BZIP2
>> 	bool "Bzip2"
>> 	depends on HAVE_KERNEL_BZIP2
>> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
>> index 49392ec..deb1bb8 100644
>> --- a/scripts/Makefile.lib
>> +++ b/scripts/Makefile.lib
>> @@ -240,6 +240,13 @@ quiet_cmd_gzip = GZIP    $@
>> cmd_gzip = (cat $(filter-out FORCE,$^) | gzip -n -f -9 > $@) || \
>> 	(rm -f $@ ; false)
>>
>> +# Minigzip
>> +#
>> ---------------------------------------------------------------------------
>> +
>> +quiet_cmd_minigzip = MINGZIP $@
>> +cmd_minigzip = (cat $(filter-out FORCE,$^) | minigzip -c -9 > $@) || \
>> +	(rm -f $@ ; false)
>> +
>> # DTC
>> #
>> ---------------------------------------------------------------------------
>>
>


  reply	other threads:[~2013-10-23  2:53 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-22 21:07 [PATCH 0/1] compress kernels with minigzip Andrew Boie
2013-10-22 21:07 ` [PATCH 1/1] x86: boot: support minigzip bzImage compression Andrew Boie
2013-10-23  0:26   ` H. Peter Anvin
2013-10-23  2:53     ` Guenter Roeck [this message]
2013-10-23  9:56       ` Michal Marek
2013-10-23 16:47       ` Boie, Andrew P
2013-10-23 16:59         ` Guenter Roeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52673A1E.60005@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=andrew.p.boie@intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mmarek@suse.cz \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox