Merge pull request #10 from techflashYT/usb-img

scripts,Makefile: add creation of bootable disk images
This commit is contained in:
Matheus
2024-09-07 10:08:20 -03:00
committed by GitHub
3 changed files with 80 additions and 11 deletions
+2
View File
@@ -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
+34 -11
View File
@@ -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
View File
@@ -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" {} ::{} \;