mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 15:08:21 +00:00
Merge pull request #10 from techflashYT/usb-img
scripts,Makefile: add creation of bootable disk images
This commit is contained in:
@@ -3,10 +3,12 @@ builds
|
|||||||
host-builds
|
host-builds
|
||||||
host-pkgs
|
host-pkgs
|
||||||
iso
|
iso
|
||||||
|
img
|
||||||
jinx
|
jinx
|
||||||
pkgs
|
pkgs
|
||||||
sources
|
sources
|
||||||
astral.iso
|
astral.iso
|
||||||
|
astral-bootable.img
|
||||||
kernel-src/include/limine.h
|
kernel-src/include/limine.h
|
||||||
kernel-src/include/printf.h
|
kernel-src/include/printf.h
|
||||||
kernel-src/include/build.h
|
kernel-src/include/build.h
|
||||||
|
|||||||
@@ -1,16 +1,20 @@
|
|||||||
ISODIR=$(shell pwd)/iso
|
ISODIR=$(shell pwd)/iso
|
||||||
|
IMGDIR=$(shell pwd)/img
|
||||||
ISO=astral.iso
|
ISO=astral.iso
|
||||||
|
IMG=astral-bootable.img
|
||||||
DISKNAME=hdd.img
|
DISKNAME=hdd.img
|
||||||
LIMINEDIR=$(shell pwd)/host-pkgs/limine/usr/local/share/limine/
|
LIMINEDIR=$(shell pwd)/host-pkgs/limine/usr/local/share/limine/
|
||||||
KERNEL=$(shell pwd)/builds/astral/astral
|
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
|
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
|
INITRD=$(shell pwd)/initrds/initrd
|
||||||
DISTROTYPE=full
|
DISTROTYPE=full
|
||||||
|
|
||||||
MINIMALPACKAGES=mlibc bash coreutils init distro-files vim nano mount netd shadow sudo neofetch
|
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
|
all: jinx
|
||||||
git submodule update --init --recursive
|
git submodule update --init --recursive
|
||||||
@@ -19,9 +23,11 @@ all: jinx
|
|||||||
make build-$(DISTROTYPE)
|
make build-$(DISTROTYPE)
|
||||||
make $(ISO)
|
make $(ISO)
|
||||||
@echo
|
@echo
|
||||||
@echo "|------------------------------------------------------------------------------------------|"
|
@echo "|--------------------------------------------------------------|"
|
||||||
@echo "|To regenerate the initrd, run 'make initrd iso'. To generate a disk image, run 'make disk'|"
|
@echo "| To regenerate the initrd, run 'make initrd iso'. |"
|
||||||
@echo "|------------------------------------------------------------------------------------------|"
|
@echo "| To generate a bootable USB/HDD image, run 'make initrd img'. |"
|
||||||
|
@echo "| To generate a disk image, run 'make disk'. |"
|
||||||
|
@echo "|--------------------------------------------------------------|"
|
||||||
@echo
|
@echo
|
||||||
|
|
||||||
jinx:
|
jinx:
|
||||||
@@ -29,6 +35,7 @@ jinx:
|
|||||||
chmod +x jinx
|
chmod +x jinx
|
||||||
|
|
||||||
iso: $(ISO)
|
iso: $(ISO)
|
||||||
|
img: $(IMG)
|
||||||
|
|
||||||
$(ISO): limine.conf liminebg.bmp $(KERNEL) $(INITRD)-$(DISTROTYPE)
|
$(ISO): limine.conf liminebg.bmp $(KERNEL) $(INITRD)-$(DISTROTYPE)
|
||||||
mkdir -p $(ISODIR)
|
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)
|
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)
|
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 targets ------
|
||||||
|
|
||||||
build-full:
|
build-full:
|
||||||
@@ -95,19 +109,28 @@ clean:
|
|||||||
# ------ run targets ------
|
# ------ run targets ------
|
||||||
|
|
||||||
run:
|
run:
|
||||||
qemu-system-x86_64 $(QEMUFLAGS)
|
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUISOFLAGS)
|
||||||
|
|
||||||
run-gdb:
|
run-gdb:
|
||||||
qemu-system-x86_64 $(QEMUFLAGS) -S -s
|
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUISOFLAGS) -S -s
|
||||||
|
|
||||||
run-kvm:
|
run-kvm:
|
||||||
qemu-system-x86_64 $(QEMUFLAGS) -enable-kvm -cpu host
|
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUISOFLAGS) -enable-kvm -cpu host
|
||||||
|
|
||||||
run-disk:
|
run-disk:
|
||||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUDISKFLAGS)
|
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUISOFLAGS) $(QEMUDISKFLAGS)
|
||||||
|
|
||||||
run-disk-gdb:
|
run-disk-gdb:
|
||||||
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUDISKFLAGS) -S -s
|
qemu-system-x86_64 $(QEMUFLAGS) $(QEMUISOFLAGS) $(QEMUDISKFLAGS) -S -s
|
||||||
|
|
||||||
run-disk-kvm:
|
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