
Just a quick hack to enable really early printk via serial-console.
Note that the port and speed is hardcoded in the console_setup-call.
This is based on some patch found in an old 2.5.7x-mm tree.

--- linux-2.6.12.2/drivers/serial/8250.c	2005-06-30 01:00:53.000000000 +0200
+++ linux-2.6.12.2-pl/drivers/serial/8250.c	2005-07-15 10:45:23.000000000 +0200
@@ -2186,8 +2186,12 @@
 	.data		= &serial8250_reg,
 };
 
-static int __init serial8250_console_init(void)
+int __init serial8250_console_init(void)
 {
+	static int inited=0;
+	if (inited)
+		return 0;
+	inited = 1;
 	serial8250_isa_init_ports();
 	register_console(&serial8250_console);
 	return 0;
--- linux-2.6.12.2/init/main.c	2005-06-30 01:00:53.000000000 +0200
+++ linux-2.6.12.2-pl/init/main.c	2005-07-15 10:44:38.000000000 +0200
@@ -430,6 +430,15 @@
  * enable them
  */
 	lock_kernel();
+	{
+		extern int __init console_setup(char *);
+		extern int __init serial8250_console_init(void);
+
+		set_bit(smp_processor_id(), &cpu_online_map);
+		console_setup("ttyS0,115200");
+		serial8250_console_init();
+		printk("early serial console enabled\n");
+	}
 	page_address_init();
 	printk(KERN_NOTICE);
 	printk(linux_banner);
--- linux-2.6.12.2/kernel/printk.c	2005-06-30 01:00:53.000000000 +0200
+++ linux-2.6.12.2-pl/kernel/printk.c	2005-07-15 10:45:52.000000000 +0200
@@ -125,7 +125,7 @@
 /*
  *	Setup a list of consoles. Called from init/main.c
  */
-static int __init console_setup(char *str)
+int __init console_setup(char *str)
 {
 	char name[sizeof(console_cmdline[0].name)];
 	char *s, *options;
