blob: eeaf4dec37003a8662bb5f6ef079cb6d46e07583 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
#!/usr/bin/env bash
# =============================================================================
# scripts/qemu.sh — flexible QEMU launcher for rs-dos
#
# Usage:
# ./scripts/qemu.sh # serial console (no graphics)
# ./scripts/qemu.sh --gui # graphical window
# ./scripts/qemu.sh --debug # GDB stub on :1234
# ./scripts/qemu.sh --chain # full boot chain (firmware → rsboot → rsnix)
# ./scripts/qemu.sh --bios /path/to.fd # custom OVMF
# ./scripts/qemu.sh --mem 512M # memory size
# ./scripts/qemu.sh --smp 2 # SMP cores
#
# One image, one drive — the system image contains kernel + ESP + data.
# =============================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_DIR"
# Defaults
GUI_FLAG=""
DEBUG_FLAG=""
CHAIN_FLAG=""
OVMF="${OVMF:-/usr/share/edk2/x64/OVMF.4m.fd}"
MEM="${MEM:-256M}"
SMP="${SMP:-1}"
SYSTEM_IMG="${SYSTEM_IMG:-/tmp/system.img}"
# Pre-build
make all
# Parse args
while [ $# -gt 0 ]; do
case "$1" in
--gui | -g)
GUI_FLAG="-vga std"
shift
;;
--debug | -d)
DEBUG_FLAG="-s -S"
shift
;;
--chain | -c)
CHAIN_FLAG=1
SYSTEM_IMG="${SYSTEM_IMG:-rs-dos.img}"
shift
;;
--image | -i)
SYSTEM_IMG="$2"
shift 2
;;
--bios | -b)
OVMF="$2"
shift 2
;;
--mem)
MEM="$2"
shift 2
;;
--smp)
SMP="$2"
shift 2
;;
*)
echo "unknown: $1"
exit 1
;;
esac
done
# Stage system image if needed
if [ -n "$CHAIN_FLAG" ]; then
./scripts/mksystem.sh --chain --gpt "$SYSTEM_IMG"
else
./scripts/mksystem.sh "$SYSTEM_IMG"
fi
echo ""
echo "=== Booting ==="
echo " image: $SYSTEM_IMG"
echo " ovmf: $OVMF"
echo " mem: $MEM smp: $SMP"
echo " gui: $([ -n "$GUI_FLAG" ] && echo yes || echo no)"
echo " gdb: $([ -n "$DEBUG_FLAG" ] && echo ':1234' || echo off)"
echo ""
exec qemu-system-x86_64 \
-bios "$OVMF" \
-drive "file=$SYSTEM_IMG,format=raw,if=none,id=hd" \
-device ide-hd,drive=hd \
-serial stdio \
-m "$MEM" \
-machine q35 \
-cpu qemu64 \
-no-reboot \
-smp "$SMP" \
$GUI_FLAG $DEBUG_FLAG
|