From 41b51f692aa55954c59ba474166c6fcf159405e2 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sun, 1 Jun 2025 20:54:56 +0200 Subject: [PATCH] Add support for netboot This includes building a tftp root and using it with qemu. --- Makefile | 6 ++++++ mk/disk.mk | 9 ++++++++- mk/qemu.mk | 14 ++++++++++++-- redox.ipxe | 5 +++++ 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 redox.ipxe diff --git a/Makefile b/Makefile index e0de2def9..8af03f3ea 100644 --- a/Makefile +++ b/Makefile @@ -13,6 +13,12 @@ live: rm -f $(BUILD)/livedisk.iso $(MAKE) $(BUILD)/livedisk.iso +netboot: + -$(FUMOUNT) $(BUILD)/filesystem/ || true + -$(FUMOUNT) /tmp/redox_installer/ || true + rm -rf $(BUILD)/livedisk.iso $(BUILD)/tftproot + $(MAKE) $(BUILD)/tftproot + popsicle: $(BUILD)/livedisk.iso popsicle-gtk $(BUILD)/livedisk.iso diff --git a/mk/disk.mk b/mk/disk.mk index 39b3aa3e2..c23a72c3c 100644 --- a/mk/disk.mk +++ b/mk/disk.mk @@ -21,9 +21,16 @@ $(BUILD)/livedisk.iso: $(HOST_FSTOOLS) $(REPO_TAG) FILESYSTEM_SIZE=$(shell $(INSTALLER) --filesystem-size -c $(FILESYSTEM_CONFIG)); \ fi && \ truncate -s "$$FILESYSTEM_SIZE"m $@.partial - umask 002 && $(INSTALLER) $(INSTALLER_OPTS) -c $(FILESYSTEM_CONFIG) --live $@.partial + umask 002 && $(INSTALLER) $(INSTALLER_OPTS) -c $(FILESYSTEM_CONFIG) --write-bootloader="$(BUILD)/bootloader-live.efi" --live $@.partial mv $@.partial $@ +$(BUILD)/tftproot: $(HOST_FSTOOLS) $(REPO_TAG) $(BUILD)/livedisk.iso + rm -r $(BUILD)/tftproot || true + mkdir $(BUILD)/tftproot + cp $(BUILD)/bootloader-live.efi $(BUILD)/tftproot/bootloader-live.efi + ln -s ../livedisk.iso $(BUILD)/tftproot/redox-live.img + cp redox.ipxe $(BUILD)/tftproot/redox.ipxe + $(BUILD)/filesystem.img: $(HOST_FSTOOLS) $(REPO_TAG) mkdir -p $(BUILD) -$(FUMOUNT) $(BUILD)/filesystem/ || true diff --git a/mk/qemu.mk b/mk/qemu.mk index 0a2a479a8..b91923f7b 100644 --- a/mk/qemu.mk +++ b/mk/qemu.mk @@ -2,6 +2,7 @@ QEMU=SDL_VIDEO_X11_DGAMOUSE=0 qemu-system-$(QEMU_ARCH) QEMUFLAGS=-d guest_errors -name "Redox OS $(ARCH)" +netboot?=no ifeq ($(ARCH),i686) audio?=ac97 @@ -148,14 +149,19 @@ else QEMUFLAGS+=-device e1000,netdev=net0,id=nic0 endif + EXTRANETARGS= + ifeq ($(netboot),yes) + EXTRANETARGS+=,tftp=$(BUILD)/tftproot,bootfile=redox.ipxe + endif + ifneq ($(bridge),) QEMUFLAGS+=-netdev bridge,br=$(bridge),id=net0 else ifeq ($(net),redir) # port 8080 and 8083 - webservers # port 64126 - our gdbserver implementation - QEMUFLAGS+=-netdev user,id=net0,hostfwd=tcp::8080-:8080,hostfwd=tcp::8083-:8083,hostfwd=tcp::64126-:64126 + QEMUFLAGS+=-netdev user,id=net0,hostfwd=tcp::8080-:8080,hostfwd=tcp::8083-:8083,hostfwd=tcp::64126-:64126$(EXTRANETARGS) else - QEMUFLAGS+=-netdev user,id=net0 -object filter-dump,id=f1,netdev=net0,file=$(BUILD)/network.pcap + QEMUFLAGS+=-netdev user,id=net0$(EXTRANETARGS) -object filter-dump,id=f1,netdev=net0,file=$(BUILD)/network.pcap endif endif @@ -236,6 +242,10 @@ qemu-deps:$(FIRMWARE) qemu-deps:$(QEMU_KERNEL) +ifeq ($(netboot),yes) +qemu-deps: $(BUILD)/tftproot +endif + qemu-deps: $(PFLASH0) ifneq ($(PFLASH1),) diff --git a/redox.ipxe b/redox.ipxe new file mode 100644 index 000000000..f92772110 --- /dev/null +++ b/redox.ipxe @@ -0,0 +1,5 @@ +#!ipxe + +kernel bootloader-live.efi +initrd redox-live.img +boot