Index: uspace/app/init/init.c
===================================================================
--- uspace/app/init/init.c	(revision 6a7f6b85802c0a160961c52c5436bd0f22f726fe)
+++ uspace/app/init/init.c	(revision 7f880ee806bd0005673c0a4b8e4e98808da44467)
@@ -35,25 +35,103 @@
  */
 
+#include <stdio.h>
+#include <unistd.h>
+#include <vfs/vfs.h>
+#include <bool.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <task.h>
+#include <malloc.h>
+#include "init.h"
 #include "version.h"
-#include <stdio.h>
 
-static void test_console(void)
+#define BUF_SIZE 150000
+
+static char *buf;
+
+static void console_wait(void)
 {
-	int c;
+	while (get_cons_phone() < 0)
+		usleep(50000);	// FIXME
+}
 
-	while ((c = getchar()) != EOF)
-		putchar(c);
+static bool mount_tmpfs(void)
+{
+	int rc = -1;
+	
+	while (rc < 0) {
+		rc = mount("tmpfs", "/", "initrd");
+		
+		switch (rc) {
+		case EOK:
+			printf(NAME ": Root filesystem mounted\n");
+			break;
+		case EBUSY:
+			printf(NAME ": Root filesystem already mounted\n");
+			break;
+		case ELIMIT:
+			printf(NAME ": Unable to mount root filesystem\n");
+			return false;
+		default:
+			sleep(5);	// FIXME
+		}
+	}
+	
+	return true;
+}
+
+static void spawn(char *fname)
+{
+	printf(NAME ": Spawning %s\n", fname);
+	
+	int fd = open(fname, O_RDONLY);
+	if (fd >= 0) {
+	
+		ssize_t rd;
+		size_t len = 0;
+		
+		// FIXME: cannot do long reads yet
+		do {
+			rd = read(fd, buf + len, 1024);
+			if (rd > 0)
+				len += rd;
+			
+		} while (rd > 0);
+		
+		if (len > 0) {
+			task_spawn(buf, len);
+			sleep(1);	// FIXME
+		}
+		
+		close(fd);
+	}
 }
 
 int main(int argc, char *argv[])
 {
+	info_print();
+	sleep(5);	// FIXME
+	
+	if (!mount_tmpfs()) {
+		printf(NAME ": Exiting\n");
+		return -1;
+	}
+	
+	buf = malloc(BUF_SIZE);
+	
+	// FIXME: spawn("/sbin/pci");
+	spawn("/sbin/fb");
+	spawn("/sbin/kbd");
+	spawn("/sbin/console");
+	
+	console_wait();
 	version_print();
-
-	printf("This is init\n");
 	
-	test_console();
-
-	printf("\nBye.\n");
-
+	spawn("/sbin/fat");
+	spawn("/sbin/tetris");
+	// FIXME: spawn("/sbin/tester");
+	// FIXME: spawn("/sbin/klog");
+	
+	free(buf);
 	return 0;
 }
@@ -61,3 +139,2 @@
 /** @}
  */
-
Index: uspace/app/init/init.h
===================================================================
--- uspace/app/init/init.h	(revision 6a7f6b85802c0a160961c52c5436bd0f22f726fe)
+++ uspace/app/init/init.h	(revision 7f880ee806bd0005673c0a4b8e4e98808da44467)
@@ -37,5 +37,5 @@
 #define __INIT_H__
 
-#include "version.h"
+#define NAME "init"
 
 #endif
Index: uspace/app/init/version.c
===================================================================
--- uspace/app/init/version.c	(revision 6a7f6b85802c0a160961c52c5436bd0f22f726fe)
+++ uspace/app/init/version.c	(revision 7f880ee806bd0005673c0a4b8e4e98808da44467)
@@ -36,4 +36,5 @@
 #include <unistd.h>
 #include <stdio.h>
+#include "init.h"
 #include "version.h"
 
@@ -52,4 +53,9 @@
 #endif
 
+void info_print(void)
+{
+	printf(NAME ": HelenOS init\n");
+}
+
 /** Print version information. */
 void version_print(void)
Index: uspace/app/init/version.h
===================================================================
--- uspace/app/init/version.h	(revision 6a7f6b85802c0a160961c52c5436bd0f22f726fe)
+++ uspace/app/init/version.h	(revision 7f880ee806bd0005673c0a4b8e4e98808da44467)
@@ -37,4 +37,5 @@
 #define __VERSION_H__
 
+extern void info_print(void);
 extern void version_print(void);
 
Index: uspace/app/tester/devmap/devmap1.c
===================================================================
--- uspace/app/tester/devmap/devmap1.c	(revision 6a7f6b85802c0a160961c52c5436bd0f22f726fe)
+++ uspace/app/tester/devmap/devmap1.c	(revision 7f880ee806bd0005673c0a4b8e4e98808da44467)
@@ -33,5 +33,5 @@
 #include <async.h>
 #include <errno.h>
-#include <../../../srv/devmap/devmap.h>
+#include <ipc/devmap.h>
 #include "../tester.h"
 
