diff --git a/Worksheet2/iso/boot/grub/makefile b/Worksheet2/iso/boot/grub/makefile new file mode 100644 index 0000000000000000000000000000000000000000..6787354431b211312068b3439ece0e6d7704aa9a --- /dev/null +++ b/Worksheet2/iso/boot/grub/makefile @@ -0,0 +1,54 @@ +NASM = nasm +LD = ld +MKISO = genisoimage +QEMU = qemu-system-i386 + +ISO_DIR = iso +GRUB_DIR = $(ISO_DIR)/boot/grub +SRC_DIR = source +BUILD_DIR = build + + +LOADER_SRC = $(SRC_DIR)/loader.asm +LINKER_SCRIPT = $(SRC_DIR)/link.ld +KERNEL = $(BUILD_DIR)/kernel.elf +ISO = os.iso +GRUB_CFG = $(GRUB_DIR)/menu.lst +STAGE2_ELTORITO = /opt/os/stage2_eltorito + +NASM_FLAGS = -f elf +LD_FLAGS = -T $(LINKER_SCRIPT) -melf_i386 + +all: $(ISO) + +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + +$(KERNEL): $(LOADER_SRC) $(LINKER_SCRIPT) | $(BUILD_DIR) + $(NASM) $(NASM_FLAGS) -o $(BUILD_DIR)/loader.o $(LOADER_SRC) + $(LD) $(LD_FLAGS) $(BUILD_DIR)/loader.o -o $(KERNEL) + +$(GRUB_CFG): | $(GRUB_DIR) + cp $(STAGE2_ELTORITO) $(GRUB_DIR)/ + echo "default=0\ntimeout=0\ntitle os\nkernel /boot/kernel.elf" > $(GRUB_CFG) + +$(GRUB_DIR): + mkdir -p $(GRUB_DIR) + +$(ISO): $(KERNEL) $(GRUB_CFG) + cp $(KERNEL) $(ISO_DIR)/boot/ + $(MKISO) -R \ + -b boot/grub/stage2_eltorito \ + -no-emul-boot \ + -boot-load-size 4 \ + -A os \ + -input-charset utf8 \ + -quiet \ + -boot-info-table \ + -o $(ISO) $(ISO_DIR) + +run: $(ISO) + $(QEMU) -nographic -boot d -cdrom $(ISO) -m 32 -d cpu -D logQ.txt + +clean: + rm -rf $(BUILD_DIR) $(ISO) $(ISO_DIR)/boot/kernel.elf logQ.txt