Re: Booting uncompressed kernel image on i386?

From: Ondrej Zary
Date: Fri Jul 01 2005 - 16:57:53 EST


Ondrej Zary wrote:
Is there an easy way to boot uncompressed kernel (2.6) image instead of the compressed one (bzImage) - using e.g. LILO?
I'm trying to do that because the decompression takes about 15 seconds on my i386 (it's really an i386 - i386DX/25 :-) The uncompressed kernel is about 1.5MB. I've already tried compressing it using gzip -1 instead of gzip -9 but that didn't make decompression any faster.

Nobody answered, time to look at the code :-)
The attached patch is a quick hack so "make" will create uncompressed kernel that can be booted in regular way.


--
Ondrej Zary
--- linux-2.6.12-printserver/scripts/Makefile.lib 2005-06-28 12:45:20.000000000 +0200
+++ linux-2.6.12-pentium/scripts/Makefile.lib 2005-07-01 23:36:30.000000000 +0200
@@ -177,7 +177,7 @@
# ---------------------------------------------------------------------------

quiet_cmd_gzip = GZIP $@
-cmd_gzip = gzip -f -9 < $< > $@
+cmd_gzip = cat < $< > $@

# ===========================================================================
# Generic stuff
--- linux-2.6.12-printserver/arch/i386/boot/compressed/misc.c 2005-06-17 21:48:29.000000000 +0200
+++ linux-2.6.12-pentium/arch/i386/boot/compressed/misc.c 2005-07-01 23:34:55.000000000 +0200
@@ -374,7 +374,15 @@

makecrc();
putstr("Uncompressing Linux... ");
- gunzip();
+ int i;
+ for (i = 0; i < input_len / WSIZE; i++) {
+ memcpy(window, input_data+i*WSIZE, WSIZE);
+ outcnt = WSIZE;
+ flush_window();
+ }
+ memcpy(window, input_data+i*WSIZE, input_len % WSIZE);
+ outcnt = input_len % WSIZE;
+ flush_window();
putstr("Ok, booting the kernel.\n");
if (high_loaded) close_output_buffer_if_we_run_high(mv);
return high_loaded;