summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--disk/<31
-rw-r--r--disk/boop1
-rw-r--r--disk/foo1
-rw-r--r--disk/mew0
-rw-r--r--disk/nya2
-rw-r--r--meson.build20
-rwxr-xr-xutil/build_disk.sh19
7 files changed, 40 insertions, 4 deletions
diff --git a/disk/<3 b/disk/<3
new file mode 100644
index 0000000..b50c3c3
--- /dev/null
+++ b/disk/<3
@@ -0,0 +1 @@
+lizzy
diff --git a/disk/boop b/disk/boop
new file mode 100644
index 0000000..e59d038
--- /dev/null
+++ b/disk/boop
@@ -0,0 +1 @@
+boop
diff --git a/disk/foo b/disk/foo
new file mode 100644
index 0000000..edd945a
--- /dev/null
+++ b/disk/foo
@@ -0,0 +1 @@
+foonya!!
diff --git a/disk/mew b/disk/mew
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/disk/mew
diff --git a/disk/nya b/disk/nya
new file mode 100644
index 0000000..8d97696
--- /dev/null
+++ b/disk/nya
@@ -0,0 +1,2 @@
+a file loaded from
+a ustar drive
diff --git a/meson.build b/meson.build
index 94f7334..ebd79a4 100644
--- a/meson.build
+++ b/meson.build
@@ -13,6 +13,12 @@ endif
fs = import('fs')
linker_script = fs.copyfile('util/linker.ld')
+drive = custom_target(output: 'drive',
+ command: ['util/build_disk.sh',
+ meson.current_source_dir() / 'disk',
+ '@OUTPUT@',
+ '@PRIVATE_DIR@'])
+
files = [
'src/asm/boot.asm',
'src/asm/long.asm',
@@ -27,7 +33,8 @@ files = [
'src/ahci.c',
'src/vga.c',
'src/fs/gpt.c',
- linker_script
+ linker_script,
+ drive
]
ld_args = [
@@ -49,9 +56,14 @@ iso = custom_target('iso',
output: 'nrvn.iso',
command: ['util/build_iso.sh', '@PRIVATE_DIR@', '@INPUT@', '@OUTPUT@'])
+qemu = find_program('qemu')
qemu_args = [
- '-cdrom', iso,
'-m', get_option('ram'),
+ '-boot', 'd',
+ '-cdrom', iso,
+ '-drive', 'id=disk,format=raw,file=@0@,if=none'.format(drive.full_path()),
+ '-device', 'ahci,id=ahci',
+ '-device', 'ide-hd,drive=disk,bus=ahci.0'
]
qemu_kvm = []
@@ -59,5 +71,5 @@ if get_option('kvm')
qemu_kvm += '-enable-kvm'
endif
-run_target('run', command: [find_program('qemu'), qemu_args, qemu_kvm])
-run_target('run-gdb', command: [find_program('qemu'), qemu_args, '-s', '-S'])
+run_target('run', command: [qemu, qemu_args, qemu_kvm])
+run_target('run-gdb', command: [qemu, qemu_args, '-s', '-S'])
diff --git a/util/build_disk.sh b/util/build_disk.sh
new file mode 100755
index 0000000..4f049c1
--- /dev/null
+++ b/util/build_disk.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+set -e
+
+disk=${1:?}
+drive=${2:?}
+priv=${3:?}
+
+[ -d "$disk" ] || exit 1
+
+truncate -s 512M "$drive"
+sfdisk "$drive" <<-EOF
+ label: gpt
+ type=L
+EOF
+mkdir -p "$priv"
+tar --format=ustar -C "$disk" . -cf "$priv/drive.tar"
+
+dd if="$priv/drive.tar" of="$drive" seek=2048 conv=notrunc