lkml.org 
[lkml]   [2009]   [Feb]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: tip: bzip2/lzma now in tip:x86/setup-lzma
    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
    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
    \
     
     \ /
      Last update: 2009-02-19 21:15    [W:6.625 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site