Index: kernel/arch/amd64/src/amd64.c
===================================================================
--- kernel/arch/amd64/src/amd64.c	(revision 24c394bae45fe03d1b2a32ee9ceb604523736d7f)
+++ kernel/arch/amd64/src/amd64.c	(revision 6d7d4f1f2f9192462d214ec25f01b0cb14a5f6aa)
@@ -49,7 +49,9 @@
 #include <genarch/drivers/ega/ega.h>
 #include <genarch/drivers/i8042/i8042.h>
+#include <genarch/drivers/ns16550/ns16550.h>
 #include <genarch/drivers/legacy/ia32/io.h>
 #include <genarch/fb/bfb.h>
 #include <genarch/kbrd/kbrd.h>
+#include <genarch/srln/srln.h>
 #include <genarch/multiboot/multiboot.h>
 #include <genarch/multiboot/multiboot2.h>
@@ -212,4 +214,35 @@
 	}
 #endif
+
+#if (defined(CONFIG_NS16550) || defined(CONFIG_NS16550_OUT))
+	/*
+	 * Initialize the ns16550 controller.
+	 */
+#ifdef CONFIG_NS16550_OUT
+	outdev_t *ns16550_out;
+	outdev_t **ns16550_out_ptr = &ns16550_out;
+#else
+	outdev_t **ns16550_out_ptr = NULL;
+#endif
+	ns16550_instance_t *ns16550_instance
+	    = ns16550_init((ns16550_t *) NS16550_BASE, IRQ_NS16550, NULL, NULL,
+	    ns16550_out_ptr);
+	if (ns16550_instance) {
+#ifdef CONFIG_NS16550
+		srln_instance_t *srln_instance = srln_init();
+		if (srln_instance) {
+			indev_t *sink = stdin_wire();
+			indev_t *srln = srln_wire(srln_instance, sink);
+			ns16550_wire(ns16550_instance, srln);
+			trap_virtual_enable_irqs(1 << IRQ_NS16550);
+		}
+#endif
+#ifdef CONFIG_NS16550_OUT
+		if (ns16550_out) {
+			stdout_wire(ns16550_out);
+		}
+#endif
+	}
+#endif
 	
 	if (irqs_info != NULL)
