summaryrefslogtreecommitdiff
path: root/experiments/01_20250913_booting_minimal_image
diff options
context:
space:
mode:
Diffstat (limited to 'experiments/01_20250913_booting_minimal_image')
-rw-r--r--experiments/01_20250913_booting_minimal_image/README16
-rwxr-xr-xexperiments/01_20250913_booting_minimal_image/build_initrd.sh8
-rw-r--r--experiments/01_20250913_booting_minimal_image/init/main.c12
-rwxr-xr-xexperiments/01_20250913_booting_minimal_image/run_qemu.sh3
4 files changed, 39 insertions, 0 deletions
diff --git a/experiments/01_20250913_booting_minimal_image/README b/experiments/01_20250913_booting_minimal_image/README
new file mode 100644
index 0000000..685b30e
--- /dev/null
+++ b/experiments/01_20250913_booting_minimal_image/README
@@ -0,0 +1,16 @@
+Initially this experiment was about booting kernel directly into VM with qemu
+and making minimal initramfs
+
+At 29.11.2025 I decided to copy few binaries to initramfs to see if I can get
+a working shell. Turned out it's actually easy and adding bin/dash, 2 libs it
+dynamically links to at runtime (ld and libc) and making correct symlinks was
+enough to get me started
+
+binaries copied:
+/bin/dash
+/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
+/lib/x86_64-linux-gnu/libc.so.6
+
+links:
+/init -> /bin/dash
+/lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
diff --git a/experiments/01_20250913_booting_minimal_image/build_initrd.sh b/experiments/01_20250913_booting_minimal_image/build_initrd.sh
new file mode 100755
index 0000000..5525e92
--- /dev/null
+++ b/experiments/01_20250913_booting_minimal_image/build_initrd.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/sh
+
+mkdir -p initramfs
+
+gcc -static -o initramfs/init init/main.c
+
+cd initramfs
+find . | cpio -o -H newc | gzip > ../initrd.cpio.gz
diff --git a/experiments/01_20250913_booting_minimal_image/init/main.c b/experiments/01_20250913_booting_minimal_image/init/main.c
new file mode 100644
index 0000000..c87e23a
--- /dev/null
+++ b/experiments/01_20250913_booting_minimal_image/init/main.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+int
+main(int argc, char **argv)
+{
+ fprintf(stderr, "Testing things UwU\n");
+
+ return 0;
+}
diff --git a/experiments/01_20250913_booting_minimal_image/run_qemu.sh b/experiments/01_20250913_booting_minimal_image/run_qemu.sh
new file mode 100755
index 0000000..211b281
--- /dev/null
+++ b/experiments/01_20250913_booting_minimal_image/run_qemu.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env sh
+
+qemu-system-x86_64 -kernel /boot/vmlinuz-$(uname -r) -initrd initrd.cpio.gz -nographic -append "root=/dev/sda console=ttyS0"