This patch need the Compressed kernel support for MIPS and the support
of LZO-compressed kernel, both of them are not available in the official
kernel yet, but you can get them in the following links respectively:
[PATCH -v2] MIPS: add support for gzip/bzip2/lzma compressed kernel image
http://www.linux-mips.org/archives/linux-mips/2009-10/msg00110.html
[PATCH v2.1 2/5] Add support for LZO-compressed kernels
The advantage of this algorithm:
Uncompressed size: 3.24Mo
gzip 1.61Mo 0.72s
lzo 1.75Mo 0.48s
and what about the compression ratio?
$ ls -sh vmlinux (original)
6.0M vmlinux
$ ls -sh vmlinuz (lzma)
1.2M vmlinuz
$ ls -sh vmlinuz (bzip2)
1.5M vmlinuz
$ ls -sh vmlinuz (gzip)
1.6M vmlinuz
$ ls -sh vmlinuz (lzop)
1.7M vmlinuz
the time statisticed for gzip,bzip2,lzma from booting to printing.
SIZE AVG. TIME(in 4 times)
gzip
bzip2
lzma
so, if you want to get the best compression ratio, you are recommended to use
LZMA, and if you need the fastest one, LZO is recommanded.
and BTW: if you need to use the gzip,bzip2,lzma,lzo support, the
corresponding tools are need to install in your machine to compress the
original kernel, they are gzip,bzip2,lzma and lzop.
(Thanks very much to Alexander Clouter <> for giving the
information about LZO to me)
Signed-off-by: Wu Zhangjin <>
---
arch/mips/Kconfig | 1 +
arch/mips/boot/compressed/Makefile | 2 ++
arch/mips/boot/compressed/decompress.c | 4 ++++
3 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 96bb02d..6bfab06 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -1303,6 +1303,7 @@ config SYS_SUPPORTS_ZBOOT
select HAVE_KERNEL_GZIP
select HAVE_KERNEL_BZIP2
select HAVE_KERNEL_LZMA
+ select HAVE_KERNEL_LZO
config SYS_SUPPORTS_ZBOOT_UART16550
bool
diff --git a/arch/mips/boot/compressed/Makefile
b/arch/mips/boot/compressed/Makefile
index 140bd9b..d746c00 100644
--- a/arch/mips/boot/compressed/Makefile
+++ b/arch/mips/boot/compressed/Makefile
@@ -38,9 +38,11 @@ $(obj)/vmlinux.bin: $(KBUILD_IMAGE)
suffix_$(CONFIG_KERNEL_GZIP) = gz
suffix_$(CONFIG_KERNEL_BZIP2) = bz2
suffix_$(CONFIG_KERNEL_LZMA) = lzma
+suffix_$(CONFIG_KERNEL_LZO) = lzo
tool_$(CONFIG_KERNEL_GZIP) = gzip
tool_$(CONFIG_KERNEL_BZIP2) = bzip2
tool_$(CONFIG_KERNEL_LZMA) = lzma
+tool_$(CONFIG_KERNEL_LZO) = lzo
$(obj)/vmlinux.$(suffix_y): $(obj)/vmlinux.bin
$(call if_changed,$(tool_y))
$(Q)rm -f $<
diff --git a/arch/mips/boot/compressed/decompress.c
b/arch/mips/boot/compressed/decompress.c
index 67330c2..6a7cbb9 100644
--- a/arch/mips/boot/compressed/decompress.c
+++ b/arch/mips/boot/compressed/decompress.c
@@ -79,6 +79,10 @@ void *memset(void *s, int c, size_t n)
#include "../../../../lib/decompress_unlzma.c"
#endif
+#ifdef CONFIG_KERNEL_LZO
+#include "../../../../lib/decompress_unlzo.c"
+#endif
+
void decompress_kernel(unsigned long boot_heap_start)
{
int zimage_size;
--
1.6.2.1
|