From: Alain Knaff <alain@knaff.lu>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: Ingo Molnar <mingo@elte.hu>, Jan Engelhardt <jengelh@medozas.de>,
the arch/x86 maintainers <x86@kernel.org>,
linux-kernel@vger.kernel.org
Subject: Re: tip: bzip2/lzma now in tip:x86/setup-lzma
Date: Thu, 19 Feb 2009 21:11:09 +0100 [thread overview]
Message-ID: <499DBCDD.90806@knaff.lu> (raw)
In-Reply-To: <499BBD62.5090506@knaff.lu>
[-- Attachment #1: Type: text/plain, Size: 771 bytes --]
Alain Knaff wrote:
> hmmm, but on a second glance, there seems to be indeed an issue. When
> compiling it a _second time_, compilation will "succeed" but produce a
> bad kernel because the first attempt left an empty
> usr/initramfs_data.cpio.bz2 .
>
> I'll look into it this evening, probably a case of "bad" failure
> recovery in the Makefile.
>
Took me slightly longer than promised, attached is the patch.
It changes/fixes three things:
1. Fix a bug in decompress.c : only scanned until the first
non-configured compressor (with disastrous result if that was gzip)
2. Fix a bug in gen_initramfs_list.sh : in case of failure, it left
indeed an empty output file behind, messing up the next make.
3. Make builtin initramfs compression configurable
Regards,
Alain
[-- Attachment #2: 20090219.diff --]
[-- Type: text/x-diff, Size: 4918 bytes --]
This changes three things:
1. Fix a bug in decompress.c : only scanned until the first
non-configured compressor (with disastrous result if that was gzip)
2. Fix a bug in gen_initramfs_list.sh : in case of failure, it left an
empty output file behind, messing up the next make.
3. Make builtin initramfs compression configurable
Signed-off-by: Alain Knaff <alain@knaff.lu>
---
diff -purN base/lib/decompress.c i386/lib/decompress.c
--- base/lib/decompress.c 2009-02-18 07:59:07.000000000 +0100
+++ i386/lib/decompress.c 2009-02-19 20:56:07.000000000 +0100
@@ -43,7 +43,7 @@ decompress_fn decompress_method(const un
if (len < 2)
return NULL; /* Need at least this much... */
- for (cf = compressed_formats; cf->decompressor; cf++) {
+ for (cf = compressed_formats; cf->name; cf++) {
if (!memcmp(inbuf, cf->magic, 2))
break;
diff -purN base/scripts/gen_initramfs_list.sh i386/scripts/gen_initramfs_list.sh
--- base/scripts/gen_initramfs_list.sh 2009-02-18 07:59:07.000000000 +0100
+++ i386/scripts/gen_initramfs_list.sh 2009-02-19 07:52:57.000000000 +0100
@@ -292,7 +292,7 @@ if [ ! -z ${output_file} ]; then
if [ "${is_cpio_compressed}" = "compressed" ]; then
cat ${cpio_tfile} > ${output_file}
else
- cat ${cpio_tfile} | ${compr} - > ${output_file}
+ (cat ${cpio_tfile} | ${compr} - > ${output_file}) || (rm ${output_file} ; false)
fi
[ -z ${cpio_file} ] && rm ${cpio_tfile}
fi
diff -purN base/usr/Kconfig i386/usr/Kconfig
--- base/usr/Kconfig 2009-02-18 07:59:07.000000000 +0100
+++ i386/usr/Kconfig 2009-02-19 20:02:41.000000000 +0100
@@ -71,3 +71,65 @@ config RD_LZMA
help
Support loading of a lzma encoded initial ramdisk or cpio buffer
If unsure, say N.
+
+choice
+ prompt "Built-in initramfs compression mode"
+ help
+ This setting is only meaningful if the INITRAMFS_SOURCE is
+ set. It decides by which algorithm the INITRAMFS_SOURCE will
+ be compressed.
+ Several compression algorithms are available, which differ
+ in efficiency, compression and decompression speed.
+ Compression speed is only relevant when building a kernel.
+ Decompression speed is relevant at each boot.
+
+ If you have any problems with bzip2 or lzma compressed
+ initramfs, mail me (Alain Knaff) <alain@knaff.lu>.
+
+ High compression options are mostly useful for users who
+ are low on disk space (embedded systems), but for whom ram
+ size matters less.
+
+ If in doubt, select 'gzip'
+
+config INITRAMFS_COMPRESSION_NONE
+ bool "None"
+ help
+ Do not compress the built-in initramfs at all. This may
+ sound wasteful in space, but, you should be aware that the
+ built-in initramfs will be compressed at a later stage
+ anyways along with the rest of the kernel, on those
+ architectures that support this.
+ However, not compressing the initramfs may lead to slightly
+ higher memory consumption during a short time at boot, while
+ both the cpio image and the unpacked filesystem image will
+ be present in memory simultaneously
+
+config INITRAMFS_COMPRESSION_GZIP
+ bool "Gzip"
+ depends on RD_GZIP
+ help
+ The old and tried gzip compression. Its compression ratio is
+ the poorest among the 3 choices; however its speed (both
+ compression and decompression) is the fastest.
+
+config INITRAMFS_COMPRESSION_BZIP2
+ bool "Bzip2"
+ depends on RD_BZIP2
+ help
+ Its compression ratio and speed is intermediate.
+ Decompression speed is slowest among the three. The initramfs
+ size is about 10% smaller with bzip2, in comparison to gzip.
+ Bzip2 uses a large amount of memory. For modern kernels you
+ will need at least 8MB RAM or more for booting.
+
+config INITRAMFS_COMPRESSION_LZMA
+ bool "LZMA"
+ depends on RD_LZMA
+ help
+ The most recent compression algorithm.
+ Its ratio is best, decompression speed is between the other
+ two. Compression is slowest. The initramfs size is about 33%
+ smaller with LZMA in comparison to gzip.
+
+endchoice
diff -purN base/usr/Makefile i386/usr/Makefile
--- base/usr/Makefile 2009-02-18 07:59:07.000000000 +0100
+++ i386/usr/Makefile 2009-02-19 20:27:31.000000000 +0100
@@ -5,24 +5,18 @@
klibcdirs:;
PHONY += klibcdirs
-# Find out "preferred" ramdisk compressor. Order of preference is
-# 1. bzip2 efficient, and likely to be present
-# 2. gzip former default
-# 3. lzma
-# 4. none
-# None of the above
-suffix_y =
-
-# Lzma, but no gzip nor bzip2
-suffix_$(CONFIG_RD_LZMA) = .lzma
+# No compression
+suffix_$(CONFIG_INITRAMFS_COMPRESSION_NONE) =
# Gzip, but no bzip2
-suffix_$(CONFIG_RD_GZIP) = .gz
+suffix_$(CONFIG_INITRAMFS_COMPRESSION_GZIP) = .gz
# Bzip2
-suffix_$(CONFIG_RD_BZIP2) = .bz2
+suffix_$(CONFIG_INITRAMFS_COMPRESSION_BZIP2) = .bz2
+# Lzma
+suffix_$(CONFIG_INITRAMFS_COMPRESSION_LZMA) = .lzma
# Generate builtin.o based on initramfs_data.o
obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data$(suffix_y).o
next prev parent reply other threads:[~2009-02-19 20:11 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-04 21:46 update8 [PATCH 2/5] init: bzip2 or lzma -compressed kernels and initrds Alain Knaff
2009-01-04 23:08 ` H. Peter Anvin
2009-01-04 23:12 ` Alain Knaff
2009-01-04 23:14 ` H. Peter Anvin
2009-01-04 23:21 ` Alain Knaff
2009-01-04 23:58 ` tip: bzip2/lzma now in tip:x86/setup-lzma H. Peter Anvin
2009-01-05 3:03 ` Sam Ravnborg
2009-01-05 5:09 ` H. Peter Anvin
2009-01-05 5:42 ` Sam Ravnborg
[not found] ` <49615136.9080900@knaff.lu>
[not found] ` <4961580A.1020301@zytor.com>
[not found] ` <4961A816.40302@knaff.lu>
[not found] ` <4961A997.10108@zytor.com>
[not found] ` <4961ADC5.6030108@knaff.lu>
[not found] ` <49622DE9.2010200@zytor.com>
[not found] ` <496240DF.2010102@knaff.lu>
[not found] ` <49624F6C.8010103@zytor.com>
[not found] ` <4962522F.20804@knaff.lu>
[not found] ` <496255B0.1050208@zytor.com>
2009-01-05 18:57 ` Alain Knaff
2009-01-05 19:36 ` H. Peter Anvin
2009-01-05 22:07 ` Alain Knaff
2009-01-05 22:11 ` H. Peter Anvin
2009-01-05 22:12 ` Alain Knaff
2009-01-05 22:59 ` H. Peter Anvin
2009-01-06 7:09 ` Alain Knaff
2009-01-06 7:21 ` Willy Tarreau
2009-01-06 7:22 ` H. Peter Anvin
2009-01-06 7:30 ` Alain Knaff
2009-01-06 21:57 ` [bzip2/lzma] fix for built-in initramfs issue Alain Knaff
2009-01-06 22:48 ` H. Peter Anvin
2009-01-06 22:50 ` Alain Knaff
2009-01-06 22:58 ` H. Peter Anvin
2009-01-06 22:58 ` Alain Knaff
2009-01-06 7:18 ` tip: bzip2/lzma now in tip:x86/setup-lzma Jaswinder Singh Rajput
2009-01-06 7:24 ` H. Peter Anvin
2009-01-06 7:53 ` Jaswinder Singh Rajput
2009-01-06 8:27 ` H. Peter Anvin
2009-02-17 21:03 ` Jan Engelhardt
2009-02-17 21:05 ` H. Peter Anvin
2009-02-17 22:08 ` Ingo Molnar
2009-02-17 23:37 ` Ingo Molnar
2009-02-18 0:52 ` H. Peter Anvin
2009-02-18 7:48 ` Alain Knaff
2009-02-18 9:20 ` Jan Engelhardt
2009-02-18 9:40 ` Alain Knaff
2009-02-18 10:29 ` Jan Engelhardt
2009-02-18 19:53 ` H. Peter Anvin
2009-02-19 6:14 ` Alain Knaff
2009-02-19 14:46 ` H. Peter Anvin
2009-02-19 15:41 ` Alain Knaff
2009-02-19 18:03 ` H. Peter Anvin
2009-02-18 19:52 ` H. Peter Anvin
2009-02-18 21:09 ` Willy Tarreau
2009-02-19 20:11 ` Alain Knaff [this message]
2009-03-01 13:16 ` Alain Knaff
2009-03-01 19:27 ` H. Peter Anvin
2009-03-02 9:53 ` Ingo Molnar
2009-03-02 9:54 ` Alain Knaff
2009-03-02 10:22 ` Ingo Molnar
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=499DBCDD.90806@knaff.lu \
--to=alain@knaff.lu \
--cc=hpa@zytor.com \
--cc=jengelh@medozas.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=x86@kernel.org \
/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