summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rwxr-xr-xrushmore-linux/rl.sh27
-rw-r--r--rushmore-linux/rlinit/rlinit.c24
-rw-r--r--rushmore-linux/rlwsd/rlwsd.c11
4 files changed, 66 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index 784daa5..f9174dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,4 +7,7 @@
*.vs
bin
build
-d3d11-re.* \ No newline at end of file
+d3d11-re.*
+rushmore-linux/build
+rushmore-linux/linux*
+rushmore-linux/rootfs \ No newline at end of file
diff --git a/rushmore-linux/rl.sh b/rushmore-linux/rl.sh
new file mode 100755
index 0000000..2f7ecae
--- /dev/null
+++ b/rushmore-linux/rl.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+set -euo pipefail
+
+ROOT="$(dirname "$0")"
+BUILD_DIR="$ROOT/build"
+ROOTFS_DIR="$ROOT/rootfs"
+
+mkdir -p "$BUILD_DIR"
+mkdir -p "$ROOTFS_DIR/proc" "$ROOTFS_DIR/sys" "$ROOTFS_DIR/dev"
+
+echo "Compiling rlinit"
+musl-gcc -static -O2 -s rlinit/rlinit.c -o "$BUILD_DIR/init"
+
+echo "Compiling rlwsd"
+musl-gcc -static -O2 -s rlwsd/rlwsd.c -o "$BUILD_DIR/rlwsd"
+
+echo "Building rootfs"
+cp "$BUILD_DIR/init" "$ROOTFS_DIR/init"
+cp "$BUILD_DIR/rlwsd" "$ROOTFS_DIR/rlwsd"
+
+echo "Building initramfs"
+(cd "$ROOTFS_DIR" && find . -print0 | cpio --null -ov --format=newc) > "$BUILD_DIR/initramfs.cpio"
+
+echo "Running QEMU (do CTRL+A then X to quit)"
+sleep 1
+qemu-system-x86_64 -kernel linux/arch/x86/boot/bzImage -initrd "$BUILD_DIR/initramfs.cpio" -append "console=ttyS0" -nographic \ No newline at end of file
diff --git a/rushmore-linux/rlinit/rlinit.c b/rushmore-linux/rlinit/rlinit.c
new file mode 100644
index 0000000..21cf2af
--- /dev/null
+++ b/rushmore-linux/rlinit/rlinit.c
@@ -0,0 +1,24 @@
+#include <unistd.h>
+#include <sys/mount.h>
+#include <sys/wait.h>
+
+int main(void)
+{
+ mount("proc", "/proc", "proc", 0, 0);
+ mount("sysfs", "/sys", "sysfs", 0, 0);
+ mount("devtmpfs", "/dev", "devtmpfs", 0, 0);
+
+ write(1, "rlinit: starting rlwsd\n", 23);
+
+ pid_t pid = fork();
+ if (pid == 0) {
+ char *argv[] = { (char*)"/rlwsd", 0 };
+ execv(argv[0], argv);
+ _exit(127);
+ }
+
+ int st = 0;
+ waitpid(pid, &st, 0);
+ write(1, "rlinit: rlwsd exited\n", 21);
+ for (;;) pause();
+}
diff --git a/rushmore-linux/rlwsd/rlwsd.c b/rushmore-linux/rlwsd/rlwsd.c
new file mode 100644
index 0000000..94ebd87
--- /dev/null
+++ b/rushmore-linux/rlwsd/rlwsd.c
@@ -0,0 +1,11 @@
+#include <unistd.h>
+
+int main(void)
+{
+ const char* msg = "[rlwsd] HELLO!\n";
+ write(1, msg, __builtin_strlen(msg));
+ for (;;)
+ {
+ pause();
+ }
+}