summaryrefslogtreecommitdiff
path: root/rushmore-linux
diff options
context:
space:
mode:
authorhunter@kvog.sh <hunter@kvog.sh>2026-02-06 16:54:54 -0600
committerhunter@kvog.sh <hunter@kvog.sh>2026-02-06 16:54:54 -0600
commitc41d3de8eeb16773cd326f8ea6cfbf575ce08b75 (patch)
tree67e8b9bdc84b44857437a86e5e1404724cbf188d /rushmore-linux
parent1f80fdb94a34f5c63a354da86347eaef1ca1c248 (diff)
rushmore-linux
Diffstat (limited to 'rushmore-linux')
-rwxr-xr-xrushmore-linux/rl.sh27
-rw-r--r--rushmore-linux/rlinit/rlinit.c24
-rw-r--r--rushmore-linux/rlwsd/rlwsd.c11
3 files changed, 62 insertions, 0 deletions
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();
+ }
+}