io1/riscv32-os/run.sh
2026-02-06 15:52:53 +03:00

30 lines
661 B
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
QEMU="${QEMU:-qemu-system-riscv32}"
CC="${CC:-clang}"
FW="${FW:-/usr/share/qemu/opensbi-riscv32-generic-fw_dynamic.bin}"
if [[ ! -f "$FW" ]]; then
echo "ERROR: OpenSBI firmware not found at: $FW"
echo "Try: ls -1 /usr/share/qemu/*opensbi*riscv32*fw_dynamic*.bin"
exit 1
fi
CFLAGS=(
-fuse-ld=lld
-std=c11 -O2 -g3 -Wall -Wextra
--target=riscv32
-march=rv32imac -mabi=ilp32
-ffreestanding -nostdlib
)
"$CC" "${CFLAGS[@]}" \
-Wl,-T,kernel.ld -Wl,-Map,kernel.map \
-o kernel.elf \
kernel.c common.c
"$QEMU" -machine virt -nographic -serial mon:stdio --no-reboot \
-bios "$FW" \
-kernel kernel.elf