Index: kernel/arch/xen32/include/drivers/xconsole.h
===================================================================
--- kernel/arch/xen32/include/drivers/xconsole.h	(revision 7c5a8dd4544d607500ff99d7bd9652675324b53e)
+++ kernel/arch/xen32/include/drivers/xconsole.h	(revision adf7f9cb0ccd66823096c3d1e336e84747a1be4a)
@@ -36,4 +36,17 @@
 #define __XCONSOLE_H__
 
+#include <arch/types.h>
+
+typedef struct {
+	char in[1024];
+	char out[2048];
+    uint32_t in_cons;
+	uint32_t in_prod;
+    uint32_t out_cons;
+	uint32_t out_prod;
+} xencons_t;
+
+extern xencons_t console_page;
+
 extern void xen_console_init(void);
 
Index: kernel/arch/xen32/src/boot/boot.S
===================================================================
--- kernel/arch/xen32/src/boot/boot.S	(revision 7c5a8dd4544d607500ff99d7bd9652675324b53e)
+++ kernel/arch/xen32/src/boot/boot.S	(revision adf7f9cb0ccd66823096c3d1e336e84747a1be4a)
@@ -78,2 +78,7 @@
 shared_info:
 	.space PAGE_SIZE
+
+.global console_page
+.org 0x2000
+console_page:
+	.space PAGE_SIZE
Index: kernel/arch/xen32/src/drivers/xconsole.c
===================================================================
--- kernel/arch/xen32/src/drivers/xconsole.c	(revision 7c5a8dd4544d607500ff99d7bd9652675324b53e)
+++ kernel/arch/xen32/src/drivers/xconsole.c	(revision adf7f9cb0ccd66823096c3d1e336e84747a1be4a)
@@ -40,16 +40,6 @@
 #include <console/console.h>
 #include <arch/hypercall.h>
-#include <mm/frame.h>
 
 #define MASK_INDEX(index, ring) ((index) & (sizeof(ring) - 1))
-
-typedef struct {
-	char in[1024];
-	char out[2048];
-    uint32_t in_cons;
-	uint32_t in_prod;
-    uint32_t out_cons;
-	uint32_t out_prod;
-} xencons_t;
 
 static bool asynchronous = false;
@@ -72,20 +62,19 @@
 {
 	if (asynchronous) {
-		xencons_t *console = (xencons_t *) PA2KA(MA2PA(PFN2ADDR(start_info.console_mfn)));
-		uint32_t cons = console->out_cons;
-		uint32_t prod = console->out_prod;
+		uint32_t cons = console_page.out_cons;
+		uint32_t prod = console_page.out_prod;
 		
 		memory_barrier();
 		
-		if ((prod - cons) > sizeof(console->out))
+		if ((prod - cons) > sizeof(console_page.out))
 			return;
 		
 		if (ch == '\n')
-			console->out[MASK_INDEX(prod++, console->out)] = '\r';
-		console->out[MASK_INDEX(prod++, console->out)] = ch;
+			console_page.out[MASK_INDEX(prod++, console_page.out)] = '\r';
+		console_page.out[MASK_INDEX(prod++, console_page.out)] = ch;
 		
 		write_barrier();
 		
-		console->out_prod = prod;
+		console_page.out_prod = prod;
 		
 		xen_notify_remote(start_info.console_evtchn);
Index: kernel/arch/xen32/src/xen32.c
===================================================================
--- kernel/arch/xen32/src/xen32.c	(revision 7c5a8dd4544d607500ff99d7bd9652675324b53e)
+++ kernel/arch/xen32/src/xen32.c	(revision adf7f9cb0ccd66823096c3d1e336e84747a1be4a)
@@ -79,4 +79,9 @@
 	pte.frame_address = ADDR2PFN((uintptr_t) start_info.shared_info);
 	xen_update_va_mapping(&shared_info, pte, UVMF_INVLPG);
+	
+	pte.present = 1;
+	pte.writeable = 1;
+	pte.frame_address = start_info.console_mfn;
+	xen_update_va_mapping(&console_page, pte, UVMF_INVLPG);
 	
 	xen_set_callbacks(XEN_CS, xen_callback, XEN_CS, xen_failsafe_callback);
