diff --git a/uboot-compiler/shmbuffer/main.c b/uboot-compiler/shmbuffer/main.c
index 0aadcad4556e27fc1e811633093028f0ad685a81..8ded25ca1ce899648666803bb24fe1e56560fb11 100644
--- a/uboot-compiler/shmbuffer/main.c
+++ b/uboot-compiler/shmbuffer/main.c
@@ -1,31 +1,7 @@
-#include<stdio.h>
-#include<stddef.h>
-#include<sys/mman.h>
-#include<fcntl.h>
-
-#define SHMADDR 0x3F000000
 
 int main(int argc, char *argv[])
 {
-    int fd;
-    int * memaddr;
-
-    fd = open("/dev/mem", O_RDWR);
-
-    if (fd == -1)
-    {
-        printf("can not access /dev/mem\n" );
-        return -1;
-    }
-
-    memaddr =
-    (int*)mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, SHMADDR);
-    if (memaddr == MAP_FAILED)
-    {
-        printf("mmap failed\n" );
-        return -1;
-    }
-    printf("value=%d\n", *memaddr);
+    
     
 
 }
\ No newline at end of file
diff --git a/uboot-compiler/shmbuffer/memory.c b/uboot-compiler/shmbuffer/memory.c
new file mode 100644
index 0000000000000000000000000000000000000000..4c6c595bd2230eb4b3c4ab75cbb10c73f9bf16f9
--- /dev/null
+++ b/uboot-compiler/shmbuffer/memory.c
@@ -0,0 +1,36 @@
+#include "memory.h"
+
+char* map_shared_mem()
+{
+    int fd;
+    char *memaddr;
+
+    fd = open("/dev/mem", O_RDWR);
+
+    if (fd == -1)
+    {
+        printf("can not access /dev/mem\n" );
+        return NULL;
+    }
+
+    memaddr =
+    (char *)mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, SHMADDR);
+    if (memaddr == MAP_FAILED)
+    {
+        printf("mmap failed\n" );
+        return NULL;
+    }
+    return memaddr;
+}
+
+int write_shared_mem(char* memaddr, packet_t packet)
+{
+    *memaddr = 0xFF;
+    memcpy(*(memaddr + 1), packet.data, packet.len);
+    return 0;
+}
+
+int shared_mem_loop(queue_t* queue)
+{
+    
+}
\ No newline at end of file
diff --git a/uboot-compiler/shmbuffer/memory.h b/uboot-compiler/shmbuffer/memory.h
new file mode 100644
index 0000000000000000000000000000000000000000..e8dd661238ee8c6623b6a263d87a1a47b54acc4e
--- /dev/null
+++ b/uboot-compiler/shmbuffer/memory.h
@@ -0,0 +1,15 @@
+#ifndef MEMORY_H
+#define MEMORY_H
+
+#include<stdio.h>
+#include<stddef.h>
+#include<sys/mman.h>
+#include<fcntl.h>
+#include<string.h>
+#include<stdint.h>
+
+#include "queue.h"
+
+#define SHMADDR 0x3F000000
+
+#endif
\ No newline at end of file
diff --git a/uboot-compiler/shmbuffer/packet.h b/uboot-compiler/shmbuffer/packet.h
new file mode 100644
index 0000000000000000000000000000000000000000..ca6d412d6a695eff40c87c2a2c55d521dafe3615
--- /dev/null
+++ b/uboot-compiler/shmbuffer/packet.h
@@ -0,0 +1,12 @@
+#ifndef PACKET_H
+#define PACKET_H
+
+#include<stddef.h>
+
+typedef struct packet {
+    size_t len;
+    char * data;
+} packet_t;
+
+
+#endif
\ No newline at end of file
diff --git a/uboot-compiler/shmbuffer/queue.c b/uboot-compiler/shmbuffer/queue.c
new file mode 100644
index 0000000000000000000000000000000000000000..66047c5b5928c86b9068e8152cec3d468885f567
--- /dev/null
+++ b/uboot-compiler/shmbuffer/queue.c
@@ -0,0 +1,64 @@
+#include "queue.h"
+
+/*
+Author: Justin Kenny
+
+Creates a queue to hold packets for shared memory based on a linked list
+*/
+
+//Initializes the queue.s
+void queue_init(queue_t *queue)
+{
+    queue->head = NULL;
+    queue->tail = NULL;
+    queue->size = 0;
+}
+
+//Returns a pointer to the new queue node. If it return null, then malloc failed.
+queue_node_t* enqueue(queue_t *queue, packet_t* packet)
+{
+    queue_node_t *n;
+    n = malloc(sizeof(*n));
+    if(n)
+    {
+        n->data = packet;
+        if(queue->head)
+        {
+            queue->tail->next = n;
+            n->prev = queue->tail;
+            queue->tail = n;
+        }
+        else
+        {
+            //the queue is empty
+            queue->head = queue->tail = n;
+        }
+        queue->size++;
+    }
+    return n;
+}
+
+packet_t* dequeue(queue_t *queue)
+{
+    queue_node_t *n;
+    if(!queue->head)
+    {
+        return NULL;
+    }
+    if(queue->head == queue->tail)
+    {
+        n = queue->head;
+        queue->head = queue->tail = NULL;
+    }
+    else
+    {
+        queue_node_t *next;
+        next = queue->head->next;
+        n = queue->head;
+        next->prev = NULL;
+        queue->head = next;
+    }
+    packet_t *packet = n->data;
+    free(n);
+    return packet;
+}
\ No newline at end of file
diff --git a/uboot-compiler/shmbuffer/queue.h b/uboot-compiler/shmbuffer/queue.h
new file mode 100644
index 0000000000000000000000000000000000000000..70146f3348375314c949682dc8af61598f142933
--- /dev/null
+++ b/uboot-compiler/shmbuffer/queue.h
@@ -0,0 +1,25 @@
+#ifndef QUEUE_H
+#define QUEUE_H
+
+#include "packet.h"
+#include <stdlib.h>
+
+typedef struct queue_node {
+    struct queue_node *next;
+    struct queue_node *prev;
+    packet_t *data;
+} queue_node_t;
+
+typedef struct queue {
+    queue_node_t *head;
+    queue_node_t *tail;
+    int size;
+} queue_t;
+
+void queue_init(queue_t *queue);
+
+queue_node_t* enqueue(queue_t *queue, packet_t* packet);
+
+packet_t* dequeue(queue_t *queue);
+
+#endif
\ No newline at end of file