mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 12:48:22 +00:00
scripts,Makefile: add creation of bootable disk images
Add support for creating bootable media for use with USB or HDD boot. Also add support for running the generated media in QEMU.
This commit is contained in:
@@ -3,10 +3,12 @@ builds
|
||||
host-builds
|
||||
host-pkgs
|
||||
iso
|
||||
img
|
||||
jinx
|
||||
pkgs
|
||||
sources
|
||||
astral.iso
|
||||
astral-bootable.img
|
||||
kernel-src/include/limine.h
|
||||
kernel-src/include/printf.h
|
||||
kernel-src/include/build.h
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
ISODIR=$(shell pwd)/iso
|
||||
IMGDIR=$(shell pwd)/img
|
||||
ISO=astral.iso
|
||||
IMG=astral-bootable.img
|
||||
DISKNAME=hdd.img
|
||||
LIMINEDIR=$(shell pwd)/host-pkgs/limine/usr/local/share/limine/
|
||||
KERNEL=$(shell pwd)/builds/astral/astral
|
||||
QEMUFLAGS=-M q35 -cdrom $(ISO) -m 4g -smp cpus=1 -no-shutdown -no-reboot -monitor stdio -debugcon file:/dev/stdout -serial file:/dev/stdout -netdev user,id=net0 -device virtio-net,netdev=net0 -object filter-dump,id=f1,netdev=net0,file=netdump.dat
|
||||
QEMUFLAGS=-M q35 -m 4g -smp cpus=1 -no-shutdown -no-reboot -monitor stdio -debugcon file:/dev/stdout -serial file:/dev/stdout -netdev user,id=net0 -device virtio-net,netdev=net0 -object filter-dump,id=f1,netdev=net0,file=netdump.dat
|
||||
QEMUISOFLAGS=-cdrom $(ISO)
|
||||
QEMUDISKFLAGS=-drive file=$(DISKNAME),if=none,id=nvme -device nvme,serial=deadc0ff,drive=nvme -boot order=dc
|
||||
QEMUIMGFLAGS=-drive file=$(IMG),if=none,id=usb -device nec-usb-xhci,id=xhci -device usb-storage,bus=xhci.0,drive=usb,removable=on
|
||||
INITRD=$(shell pwd)/initrds/initrd
|
||||
DISTROTYPE=full
|
||||
|
||||
MINIMALPACKAGES=mlibc bash coreutils init distro-files vim nano mount netd shadow sudo neofetch
|
||||
|
||||
.PHONY: all kernel clean clean-kernel iso initrd full minimal disk
|
||||
.PHONY: all kernel clean clean-kernel iso img initrd full minimal disk
|
||||
|
||||
all: jinx
|
||||
git submodule update --init --recursive
|
||||
@@ -19,9 +23,11 @@ all: jinx
|
||||
make build-$(DISTROTYPE)
|
||||
make $(ISO)
|
||||
@echo
|
||||
@echo "|------------------------------------------------------------------------------------------|"
|
||||
@echo "|To regenerate the initrd, run 'make initrd iso'. To generate a disk image, run 'make disk'|"
|
||||
@echo "|------------------------------------------------------------------------------------------|"
|
||||
@echo "|--------------------------------------------------------------|"
|
||||
@echo "| To regenerate the initrd, run 'make initrd iso'. |"
|
||||
@echo "| To generate a bootable USB/HDD image, run 'make initrd img'. |"
|
||||
@echo "| To generate a disk image, run 'make disk'. |"
|
||||
@echo "|--------------------------------------------------------------|"
|
||||
@echo
|
||||
|
||||
jinx:
|
||||
@@ -29,6 +35,7 @@ jinx:
|
||||
chmod +x jinx
|
||||
|
||||
iso: $(ISO)
|
||||
img: $(IMG)
|
||||
|
||||
$(ISO): limine.conf liminebg.bmp $(KERNEL) $(INITRD)-$(DISTROTYPE)
|
||||
mkdir -p $(ISODIR)
|
||||
@@ -36,6 +43,13 @@ $(ISO): limine.conf liminebg.bmp $(KERNEL) $(INITRD)-$(DISTROTYPE)
|
||||
cp $(KERNEL) liminebg.bmp limine.conf $(LIMINEDIR)/limine-bios.sys $(LIMINEDIR)/limine-bios-cd.bin $(LIMINEDIR)/limine-uefi-cd.bin $(ISODIR)
|
||||
xorriso -as mkisofs -b limine-bios-cd.bin -no-emul-boot -boot-load-size 4 -boot-info-table --efi-boot limine-uefi-cd.bin -efi-boot-part --efi-boot-image --protective-msdos-label $(ISODIR) -o $(ISO)
|
||||
|
||||
$(IMG): limine.conf liminebg.bmp $(KERNEL) $(INITRD)-$(DISTROTYPE)
|
||||
mkdir -p $(IMGDIR)/EFI/BOOT
|
||||
ln -f $(INITRD)-$(DISTROTYPE) $(IMGDIR)/initrd
|
||||
cp $(KERNEL) liminebg.bmp limine.conf $(LIMINEDIR)/limine-bios.sys $(IMGDIR)
|
||||
cp $(LIMINEDIR)/BOOT{IA32,X64}.EFI $(IMGDIR)/EFI/BOOT
|
||||
./genbootimg.sh 1G $(IMG) $(IMGDIR)
|
||||
|
||||
# ------ build targets ------
|
||||
|
||||
build-full:
|
||||
@@ -95,19 +109,28 @@ clean:
|
||||
# ------ run targets ------
|
||||
|
||||
run:
|
||||
qemu-system-x86_64 $(QEMUFLAGS)
|
||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUISOFLAGS)
|
||||
|
||||
run-gdb:
|
||||
qemu-system-x86_64 $(QEMUFLAGS) -S -s
|
||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUISOFLAGS) -S -s
|
||||
|
||||
run-kvm:
|
||||
qemu-system-x86_64 $(QEMUFLAGS) -enable-kvm -cpu host
|
||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUISOFLAGS) -enable-kvm -cpu host
|
||||
|
||||
run-disk:
|
||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUDISKFLAGS)
|
||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUISOFLAGS) $(QEMUDISKFLAGS)
|
||||
|
||||
run-disk-gdb:
|
||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUDISKFLAGS) -S -s
|
||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUISOFLAGS) $(QEMUDISKFLAGS) -S -s
|
||||
|
||||
run-disk-kvm:
|
||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUDISKFLAGS) -enable-kvm -cpu host
|
||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUISOFLAGS) $(QEMUDISKFLAGS) -enable-kvm -cpu host
|
||||
|
||||
run-img:
|
||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUIMGFLAGS)
|
||||
|
||||
run-img-gdb:
|
||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUIMGFLAGS) -S -s
|
||||
|
||||
run-img-kvm:
|
||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUIMGFLAGS) -enable-kvm -cpu host
|
||||
|
||||
Executable
+44
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
if [ $# != 3 ]
|
||||
then
|
||||
echo "usage: $0 size diskname"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z $1 ]
|
||||
then
|
||||
echo "please pass a non empty size"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z $2 ]
|
||||
then
|
||||
echo "please pass a non empty disk name"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z $3 ]
|
||||
then
|
||||
echo "please pass a non empty imgdir"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# most of the below shamelessly stolen from
|
||||
# https://github.com/limine-bootloader/limine-c-template/blob/trunk/GNUmakefile
|
||||
# at commit 7310a9b098731cbd4242ed82f5c9b9c60ae14919
|
||||
|
||||
rm -f "$2"
|
||||
truncate -s "$1" "$2"
|
||||
sgdisk "$2" -n 1:2048 -t 1:ef00
|
||||
host-pkgs/limine/usr/local/bin/limine bios-install "$2"
|
||||
mformat -i "$2@@1M"
|
||||
mmd -i "$2@@1M" ::/EFI ::/EFI/BOOT ::/boot ::/boot/limine
|
||||
|
||||
img="$PWD/$2"
|
||||
|
||||
cd "$3"
|
||||
#find . -type d -exec mmd -i "$img@@1M" ::{} \;
|
||||
# FIXME ^^^ breaks, but there's no dirs yet, so it doesn't matter :P
|
||||
find . -type f -exec mcopy -i "$img@@1M" {} ::{} \;
|
||||
Reference in New Issue
Block a user