From 21fbb5720e4be2887b2faab5728e69c92fbb1a5b Mon Sep 17 00:00:00 2001 From: "Anna (navi) Figueiredo Gomes" Date: Thu, 6 Jun 2024 15:58:58 +0200 Subject: ustar disk Signed-off-by: Anna (navi) Figueiredo Gomes --- disk/<3 | 1 + disk/boop | 1 + disk/foo | 1 + disk/mew | 0 disk/nya | 2 ++ meson.build | 20 ++++++++++++++++---- util/build_disk.sh | 19 +++++++++++++++++++ 7 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 disk/<3 create mode 100644 disk/boop create mode 100644 disk/foo create mode 100644 disk/mew create mode 100644 disk/nya create mode 100755 util/build_disk.sh 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 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 -- cgit v1.2.3