diff --git a/src/kernel/kint.h b/src/kernel/kint.h
index 8f934fa..d892f88 100644
--- a/src/kernel/kint.h
+++ b/src/kernel/kint.h
@@ -16,3 +16,5 @@
 };
 
 #define NULL 0
+#define MIN(a, b) ((a)>(b)?(b):(a))
+#define MAX(a, b) ((a)>(b)?(a):(b))
diff --git a/src/kernel/main.c b/src/kernel/main.c
index a939238..60d40aa 100644
--- a/src/kernel/main.c
+++ b/src/kernel/main.c
@@ -6,6 +6,7 @@
 #include "timer.h"
 #include "vga.h"
 #include "vfs.h"
+#include "vfs_initrd.h"
 #include "multiboot.h"
 
 int kmain(struct multiboot *mboot)
@@ -33,16 +34,17 @@
 	kprintf("initrd is at 0x%x to 0x%x\n", initrd_loc);
 
 	init_vfs();
+	init_initrd_vfs(initrd_loc);
 	kprintf("VFS initialized\n");
 
 	vga_set_color(LIGHT_GREEN, BLACK);
 	vga_write("Setup complete!\n");
 	vga_set_color(WHITE, BLACK);
 
-	kprintf("fs_readdir(\"/\")\n");
+	kprintf("fs_readdir(\"/dev/initrd\")\n");
 
 	struct fs_dirent dirent;
-	for (int i = 0; fs_readdir(&root, i, &dirent); i++)
+	for (int i = 0; fs_readdir(&initrd, i, &dirent); i++)
 	{
 		kprintf("name: %s, inode: %d\n", dirent.name, dirent.inode);
 	}
diff --git a/src/kernel/vfs_initrd.c b/src/kernel/vfs_initrd.c
index 0ec48a0..cad6d0b 100644
--- a/src/kernel/vfs_initrd.c
+++ b/src/kernel/vfs_initrd.c
@@ -1,14 +1,125 @@
-#include <initrd/initrd.h>
-#include "kint.h"
-#include "vfs.h"
+#include "alloc.h"
 #include "io.h"
+#include "kint.h"
+#include "log.h"
+#include "vfs.h"
+#include <initrd/initrd.h>
 
-struct fs_node real_initrd;
-struct fs_node *initrd_content = NULL;
+struct initrd_fs_entry
+{
+	char *name;
+	uchar *data;
+	uint size;
+};
 
-void init_initrd_vfs()
+static struct fs_node real_initrd;
+static struct fs_node *initrd_content = NULL;
+static struct initrd_fs_entry *entries = NULL;
+static struct fs_vtable initrd_v;
+static uint num_initrd_files = 0;
+
+bool initrd_readdir(struct fs_node *node, uint i, struct fs_dirent *out)
+{
+	if (node != &real_initrd)
+		return false;
+
+	if (i >= num_initrd_files)
+		return false;
+
+	memcpy(out->name, entries[i].name, strlen(entries[i].name) + 1);
+	out->inode = i;
+	return true;
+}
+
+struct fs_node *initrd_finddir(struct fs_node *node, char *name)
+{
+	if (node != &real_initrd)
+		return NULL;
+
+	for (int i = 0; i < num_initrd_files; i++)
+	{
+		if (strcmp(entries[i].name, name) == 0)
+			return &initrd_content[i];
+	}
+	return NULL;
+}
+
+void initrd_open(struct fs_node *node)
+{
+}
+
+void initrd_close(struct fs_node *node)
+{
+}
+
+uint initrd_read(struct fs_node *node, size_t offset, size_t size, uchar *buffer)
+{
+	if (offset > node->size)
+		return 0;
+
+	size = MIN(size, node->size - offset);
+	memcpy(buffer, entries[node->dri_res].data, size);
+
+	return size;
+}
+
+void init_initrd_vfs(uchar *data)
 {
 	memset(&real_initrd, 0, sizeof(real_initrd));
 
 	real_initrd.flags = FS_DIRECTORY;
+	real_initrd.vtable = &initrd_v;
+
+	initrd_v.readdir = initrd_readdir;
+	initrd_v.finddir = initrd_finddir;
+	initrd_v.open = initrd_open;
+	initrd_v.close = initrd_close;
+	initrd_v.read = initrd_read;
+
+	// parse initrd
+	struct initrd_global_header *h = (struct initrd_global_header *)data;
+
+	if (h->magic != INITRD_MAGIC)
+	{
+		kprintf("initrd magic is wrong: %x should be %x\n", h->magic,
+				INITRD_MAGIC);
+		kpanic("initrd magic");
+	}
+
+	num_initrd_files = h->num_files;
+	initrd_content = malloc(sizeof(struct fs_node) * num_initrd_files);
+	entries = malloc(sizeof(struct initrd_fs_entry) * num_initrd_files);
+
+	// create fs_nodes for files
+	struct initrd_file_header *f =
+		(struct initrd_file_header *)(data +
+									  sizeof(struct initrd_global_header));
+
+	for (int i = 0; i < num_initrd_files; i++)
+	{
+		uchar *data = (uchar *)((size_t)f + sizeof(struct initrd_file_header));
+
+		entries[i].data = data;
+		entries[i].name = f->name;
+		entries[i].size = f->size;
+
+		initrd_content[i] = (struct fs_node){
+			.dri_res = i,
+			.flags = FS_FILE,
+			.mask = 0b101001001,
+			.uid = 0,
+			.gid = 0,
+			.size = f->size,
+			.vtable = &initrd_v,
+			.mount = NULL
+		};
+
+		memcpy(initrd_content[i].name, f->name, strlen(f->name));
+
+		f = (struct initrd_file_header *)((size_t)data + f->size);
+	}
+
+	// mount initrd to /dev/initrd/
+	if (fs_mount(&initrd, &real_initrd))
+		kpanic("Failed to mount initrd to /dev/initrd");
 }
diff --git a/src/kernel/vfs_initrd.h b/src/kernel/vfs_initrd.h
index 91959d6..a76288c 100644
--- a/src/kernel/vfs_initrd.h
+++ b/src/kernel/vfs_initrd.h
@@ -1,3 +1,7 @@
 #pragma once
 
-void init_initrd_vfs();
+#include "kint.h"
+
+/* Note: this requires virtual memory to be set up,
+ * this WILL call malloc() */
+void init_initrd_vfs(uchar *data);
