diff --git a/GNUmakefile b/GNUmakefile index 5064596..d3896ee 100755 --- a/GNUmakefile +++ b/GNUmakefile @@ -31,7 +31,8 @@ run-hdd: run-hdd-$(ARCH) .PHONY: ints ints: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso - qemu-system-$(ARCH) \ + @echo " Starting QEMU with $(IMAGE_NAME).iso" + @qemu-system-$(ARCH) \ -M q35 \ -drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \ -cdrom $(IMAGE_NAME).iso \ @@ -40,7 +41,8 @@ ints: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso .PHONY: run-x86_64 gdb-x86_64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso - qemu-system-$(ARCH) \ + @echo " Starting QEMU with $(IMAGE_NAME).iso" + @qemu-system-$(ARCH) \ -M q35 \ -drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \ -cdrom $(IMAGE_NAME).iso \ @@ -49,7 +51,8 @@ gdb-x86_64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso .PHONY: run-x86_64 run-x86_64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso - qemu-system-$(ARCH) \ + @echo " Starting QEMU with $(IMAGE_NAME).iso" + @qemu-system-$(ARCH) \ -M q35 \ -drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \ -cdrom $(IMAGE_NAME).iso \ @@ -57,7 +60,8 @@ run-x86_64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso .PHONY: run-hdd-x86_64 run-hdd-x86_64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd - qemu-system-$(ARCH) \ + @echo " Starting QEMU with $(IMAGE_NAME).hdd" + @qemu-system-$(ARCH) \ -M q35 \ -drive if=pflash,unit=0,format=raw,file=ovmf/ovmf-code-$(ARCH).fd,readonly=on \ -hda $(IMAGE_NAME).hdd \ @@ -65,7 +69,8 @@ run-hdd-x86_64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd .PHONY: run-aarch64 run-aarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso - qemu-system-$(ARCH) \ + @echo " Starting QEMU with $(IMAGE_NAME).iso" + @qemu-system-$(ARCH) \ -M virt \ -cpu cortex-a72 \ -device ramfb \ @@ -78,7 +83,8 @@ run-aarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso .PHONY: run-hdd-aarch64 run-hdd-aarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd - qemu-system-$(ARCH) \ + @echo " Starting QEMU with $(IMAGE_NAME).hdd" + @qemu-system-$(ARCH) \ -M virt \ -cpu cortex-a72 \ -device ramfb \ @@ -91,7 +97,8 @@ run-hdd-aarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd .PHONY: run-riscv64 run-riscv64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso - qemu-system-$(ARCH) \ + @echo " Starting QEMU with $(IMAGE_NAME).iso" + @qemu-system-$(ARCH) \ -M virt \ -cpu rv64 \ -device ramfb \ @@ -104,7 +111,8 @@ run-riscv64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso .PHONY: run-hdd-riscv64 run-hdd-riscv64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd - qemu-system-$(ARCH) \ + @echo " Starting QEMU with $(IMAGE_NAME).hdd" + @qemu-system-$(ARCH) \ -M virt \ -cpu rv64 \ -device ramfb \ @@ -117,7 +125,8 @@ run-hdd-riscv64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd .PHONY: run-loongarch64 run-loongarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso - qemu-system-$(ARCH) \ + @echo " Starting QEMU with $(IMAGE_NAME).iso" + @qemu-system-$(ARCH) \ -M virt \ -cpu la464 \ -device ramfb \ @@ -130,7 +139,8 @@ run-loongarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).iso .PHONY: run-hdd-loongarch64 run-hdd-loongarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd - qemu-system-$(ARCH) \ + @echo " Starting QEMU with $(IMAGE_NAME).hdd" + @qemu-system-$(ARCH) \ -M virt \ -cpu la464 \ -device ramfb \ @@ -144,7 +154,8 @@ run-hdd-loongarch64: ovmf/ovmf-code-$(ARCH).fd $(IMAGE_NAME).hdd .PHONY: run-bios run-bios: $(IMAGE_NAME).iso - qemu-system-$(ARCH) \ + @echo " Starting QEMU with $(IMAGE_NAME).iso" + @qemu-system-$(ARCH) \ -M q35 \ -cdrom $(IMAGE_NAME).iso \ -boot d \ @@ -152,122 +163,132 @@ run-bios: $(IMAGE_NAME).iso .PHONY: run-hdd-bios run-hdd-bios: $(IMAGE_NAME).hdd - qemu-system-$(ARCH) \ + @echo " Starting QEMU with $(IMAGE_NAME).hdd" + @qemu-system-$(ARCH) \ -M q35 \ -hda $(IMAGE_NAME).hdd \ $(QEMUFLAGS) ovmf/ovmf-code-$(ARCH).fd: - mkdir -p ovmf - curl -Lo $@ https://github.com/osdev0/edk2-ovmf-nightly/releases/latest/download/ovmf-code-$(ARCH).fd - case "$(ARCH)" in \ + @mkdir -p ovmf + @curl -Lo $@ https://github.com/osdev0/edk2-ovmf-nightly/releases/latest/download/ovmf-code-$(ARCH).fd + @case "$(ARCH)" in \ aarch64) dd if=/dev/zero of=$@ bs=1 count=0 seek=67108864 2>/dev/null;; \ riscv64) dd if=/dev/zero of=$@ bs=1 count=0 seek=33554432 2>/dev/null;; \ - esac + @esac limine/limine: - rm -rf limine - git clone https://github.com/limine-bootloader/limine.git --branch=v9.x-binary --depth=1 - $(MAKE) -C limine \ + @rm -rf limine + @git clone https://github.com/limine-bootloader/limine.git --branch=v9.x-binary --depth=1 + @$(MAKE) -C limine \ CC="$(HOST_CC)" \ CFLAGS="$(HOST_CFLAGS)" \ CPPFLAGS="$(HOST_CPPFLAGS)" \ LDFLAGS="$(HOST_LDFLAGS)" \ LIBS="$(HOST_LIBS)" + @echo " Limine installer has been built" kernel-deps: - ./kernel/get-deps - touch kernel-deps + @./kernel/get-deps + @touch kernel-deps + @echo " Kernel dependencies have been downloaded" .PHONY: kernel kernel: kernel-deps $(MAKE) -C kernel $(IMAGE_NAME).iso: limine/limine kernel - rm -rf iso_root - mkdir -p iso_root/boot - cp -v kernel/bin-$(ARCH)/soaplin iso_root/boot/ - mkdir -p iso_root/boot/limine - cp -v limine.conf iso_root/boot/limine/ - mkdir -p iso_root/EFI/BOOT + @rm -rf iso_root + @mkdir -p iso_root/boot + @cp -v kernel/bin-$(ARCH)/soaplin iso_root/boot/ + @mkdir -p iso_root/boot/limine + @cp -v limine.conf iso_root/boot/limine/ + @mkdir -p iso_root/EFI/BOOT ifeq ($(ARCH),x86_64) - cp -v testing/sk-hello.elf iso_root/ - cp -v limine/limine-bios.sys limine/limine-bios-cd.bin limine/limine-uefi-cd.bin iso_root/boot/limine/ - cp -v limine/BOOTX64.EFI iso_root/EFI/BOOT/ - cp -v limine/BOOTIA32.EFI iso_root/EFI/BOOT/ - xorriso -as mkisofs -R -r -J -b boot/limine/limine-bios-cd.bin \ + @cp -v testing/sk-hello.elf iso_root/ + @cp -v limine/limine-bios.sys limine/limine-bios-cd.bin limine/limine-uefi-cd.bin iso_root/boot/limine/ + @cp -v limine/BOOTX64.EFI iso_root/EFI/BOOT/ + @cp -v limine/BOOTIA32.EFI iso_root/EFI/BOOT/ + @xorriso -as mkisofs -R -r -J -b boot/limine/limine-bios-cd.bin \ -no-emul-boot -boot-load-size 4 -boot-info-table -hfsplus \ -apm-block-size 2048 --efi-boot boot/limine/limine-uefi-cd.bin \ -efi-boot-part --efi-boot-image --protective-msdos-label \ iso_root -o $(IMAGE_NAME).iso - ./limine/limine bios-install $(IMAGE_NAME).iso + @./limine/limine bios-install $(IMAGE_NAME).iso endif ifeq ($(ARCH),aarch64) - cp -v limine/limine-uefi-cd.bin iso_root/boot/limine/ - cp -v limine/BOOTAA64.EFI iso_root/EFI/BOOT/ - xorriso -as mkisofs -R -r -J \ + @cp -v limine/limine-uefi-cd.bin iso_root/boot/limine/ + @cp -v limine/BOOTAA64.EFI iso_root/EFI/BOOT/ + @xorriso -as mkisofs -R -r -J \ -hfsplus -apm-block-size 2048 \ --efi-boot boot/limine/limine-uefi-cd.bin \ -efi-boot-part --efi-boot-image --protective-msdos-label \ iso_root -o $(IMAGE_NAME).iso endif ifeq ($(ARCH),riscv64) - cp -v limine/limine-uefi-cd.bin iso_root/boot/limine/ - cp -v limine/BOOTRISCV64.EFI iso_root/EFI/BOOT/ - xorriso -as mkisofs -R -r -J \ + @cp -v limine/limine-uefi-cd.bin iso_root/boot/limine/ + @cp -v limine/BOOTRISCV64.EFI iso_root/EFI/BOOT/ + @xorriso -as mkisofs -R -r -J \ -hfsplus -apm-block-size 2048 \ --efi-boot boot/limine/limine-uefi-cd.bin \ -efi-boot-part --efi-boot-image --protective-msdos-label \ iso_root -o $(IMAGE_NAME).iso endif ifeq ($(ARCH),loongarch64) - cp -v limine/limine-uefi-cd.bin iso_root/boot/limine/ - cp -v limine/BOOTLOONGARCH64.EFI iso_root/EFI/BOOT/ - xorriso -as mkisofs -R -r -J \ + @cp -v limine/limine-uefi-cd.bin iso_root/boot/limine/ + @cp -v limine/BOOTLOONGARCH64.EFI iso_root/EFI/BOOT/ + @xorriso -as mkisofs -R -r -J \ -hfsplus -apm-block-size 2048 \ --efi-boot boot/limine/limine-uefi-cd.bin \ -efi-boot-part --efi-boot-image --protective-msdos-label \ iso_root -o $(IMAGE_NAME).iso endif - rm -rf iso_root + @rm -rf iso_root + @echo " The final ISO image has been created: $(IMAGE_NAME).iso" $(IMAGE_NAME).hdd: limine/limine kernel - rm -f $(IMAGE_NAME).hdd - dd if=/dev/zero bs=1M count=0 seek=64 of=$(IMAGE_NAME).hdd - PATH=$$PATH:/usr/sbin:/sbin sgdisk $(IMAGE_NAME).hdd -n 1:2048 -t 1:ef00 + @rm -f $(IMAGE_NAME).hdd + @dd if=/dev/zero bs=1M count=0 seek=64 of=$(IMAGE_NAME).hdd + @echo " Creating $(IMAGE_NAME).hdd" + @PATH=$$PATH:/usr/sbin:/sbin sgdisk $(IMAGE_NAME).hdd -n 1:2048 -t 1:ef00 + @echo " Creating partition table" ifeq ($(ARCH),x86_64) - ./limine/limine bios-install $(IMAGE_NAME).hdd + @./limine/limine bios-install $(IMAGE_NAME).hdd endif - mformat -i $(IMAGE_NAME).hdd@@1M - mmd -i $(IMAGE_NAME).hdd@@1M ::/EFI ::/EFI/BOOT ::/boot ::/boot/limine - mcopy -i $(IMAGE_NAME).hdd@@1M kernel/bin-$(ARCH)/kernel ::/boot - mcopy -i $(IMAGE_NAME).hdd@@1M limine.conf ::/boot/limine + @mformat -i $(IMAGE_NAME).hdd@@1M + @mmd -i $(IMAGE_NAME).hdd@@1M ::/EFI ::/EFI/BOOT ::/boot ::/boot/limine + @mcopy -i $(IMAGE_NAME).hdd@@1M kernel/bin-$(ARCH)/kernel ::/boot + @mcopy -i $(IMAGE_NAME).hdd@@1M limine.conf ::/boot/limine ifeq ($(ARCH),x86_64) - mcopy -i $(IMAGE_NAME).hdd@@1M limine/limine-bios.sys ::/boot/limine - mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTX64.EFI ::/EFI/BOOT - mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTIA32.EFI ::/EFI/BOOT + @mcopy -i $(IMAGE_NAME).hdd@@1M limine/limine-bios.sys ::/boot/limine + @mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTX64.EFI ::/EFI/BOOT + @mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTIA32.EFI ::/EFI/BOOT endif ifeq ($(ARCH),aarch64) - mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTAA64.EFI ::/EFI/BOOT + @mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTAA64.EFI ::/EFI/BOOT endif ifeq ($(ARCH),riscv64) - mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTRISCV64.EFI ::/EFI/BOOT + @mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTRISCV64.EFI ::/EFI/BOOT endif ifeq ($(ARCH),loongarch64) - mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTLOONGARCH64.EFI ::/EFI/BOOT + @mcopy -i $(IMAGE_NAME).hdd@@1M limine/BOOTLOONGARCH64.EFI ::/EFI/BOOT endif + @echo " Installed Limine bootloader" .PHONY: clean clean: - $(MAKE) -C kernel clean - rm -rf iso_root $(IMAGE_NAME).iso $(IMAGE_NAME).hdd + @$(MAKE) -C kernel clean + @rm -rf iso_root $(IMAGE_NAME).iso $(IMAGE_NAME).hdd + @echo " The output files have been removed." .PHONY: distclean distclean: - $(MAKE) -C kernel distclean - rm -rf iso_root *.iso *.hdd kernel-deps limine ovmf + @$(MAKE) -C kernel distclean + @rm -rf iso_root *.iso *.hdd kernel-deps limine ovmf + @echo " The output & downloaded files have been removed." # Make some function to run clang-format all over the kernel .PHONY: format format: - clang-format -i -style=file $(shell find kernel/src -name '*.c' -or -name '*.h') \ No newline at end of file + @clang-format -i -style=file $(shell find kernel/src -name '*.c' -or -name '*.h') + @echo " Kernel source code formatted" \ No newline at end of file diff --git a/kernel/GNUmakefile b/kernel/GNUmakefile index 9af9d0e..7350da5 100755 --- a/kernel/GNUmakefile +++ b/kernel/GNUmakefile @@ -167,54 +167,60 @@ all: bin-$(ARCH)/$(OUTPUT) # Link rules for building the C compiler runtime. cc-runtime-$(ARCH)/cc-runtime.a: GNUmakefile cc-runtime/* - rm -rf cc-runtime-$(ARCH) - cp -r cc-runtime cc-runtime-$(ARCH) - $(MAKE) -C cc-runtime-$(ARCH) -f cc-runtime.mk \ + @rm -rf cc-runtime-$(ARCH) + @cp -r cc-runtime cc-runtime-$(ARCH) + @$(MAKE) -C cc-runtime-$(ARCH) -f cc-runtime.mk \ CC="$(CC)" \ AR="$(AR)" \ CFLAGS="$(CFLAGS)" \ CPPFLAGS='-isystem ../freestnd-c-hdrs -DCC_RUNTIME_NO_FLOAT' + @echo " C runtime built" # Link rules for the final executable. bin-$(ARCH)/$(OUTPUT): GNUmakefile linker-$(ARCH).ld $(OBJ) cc-runtime-$(ARCH)/cc-runtime.a - mkdir -p "$$(dirname $@)" - $(CC) $(CFLAGS) $(LDFLAGS) $(OBJ) cc-runtime-$(ARCH)/cc-runtime.a -o $@ + @mkdir -p "$$(dirname $@)" + @echo " LD $@" + @$(CC) $(CFLAGS) $(LDFLAGS) $(OBJ) cc-runtime-$(ARCH)/cc-runtime.a -o $@ # Compilation rules for *.c files. obj-$(ARCH)/%.c.o: src/%.c GNUmakefile - mkdir -p "$$(dirname $@)" - $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ + @mkdir -p "$$(dirname $@)" + @echo " CC $@" + @$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ # Compilation rules for *.S files. obj-$(ARCH)/%.S.o: src/%.S GNUmakefile - mkdir -p "$$(dirname $@)" - $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ + @mkdir -p "$$(dirname $@)" + @echo " AS $@" + @$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@ ifeq ($(ARCH),x86_64) # Compilation rules for *.asm (nasm) files. obj-$(ARCH)/%.asm.o: src/%.asm GNUmakefile - mkdir -p "$$(dirname $@)" - nasm $(NASMFLAGS) $< -o $@ + @mkdir -p "$$(dirname $@)" + @echo " NASM $@" + @nasm $(NASMFLAGS) $< -o $@ endif # Remove object files and the final executable. .PHONY: clean clean: - rm -rf bin-$(ARCH) obj-$(ARCH) cc-runtime-$(ARCH) - + @rm -rf bin-$(ARCH) obj-$(ARCH) cc-runtime-$(ARCH) + @echo " The kernel output files have been removed." # Remove everything built and generated including downloaded dependencies. .PHONY: distclean distclean: - rm -rf bin-* obj-* freestnd-c-hdrs cc-runtime* src/limine.h + @rm -rf bin-* obj-* freestnd-c-hdrs cc-runtime* src/limine.h + @echo " The kernel output & downloaded files have been removed." # Install the final built executable to its final on-root location. .PHONY: install install: all - install -d "$(DESTDIR)$(PREFIX)/share/$(OUTPUT)" - install -m 644 bin-$(ARCH)/$(OUTPUT) "$(DESTDIR)$(PREFIX)/share/$(OUTPUT)/$(OUTPUT)-$(ARCH)" + @install -d "$(DESTDIR)$(PREFIX)/share/$(OUTPUT)" + @install -m 644 bin-$(ARCH)/$(OUTPUT) "$(DESTDIR)$(PREFIX)/share/$(OUTPUT)/$(OUTPUT)-$(ARCH)" # Try to undo whatever the "install" target did. .PHONY: uninstall uninstall: - rm -f "$(DESTDIR)$(PREFIX)/share/$(OUTPUT)/$(OUTPUT)-$(ARCH)" - -rmdir "$(DESTDIR)$(PREFIX)/share/$(OUTPUT)" + @rm -f "$(DESTDIR)$(PREFIX)/share/$(OUTPUT)/$(OUTPUT)-$(ARCH)" + @-rmdir "$(DESTDIR)$(PREFIX)/share/$(OUTPUT)" diff --git a/kernel/src/mm/vmm.c b/kernel/src/mm/vmm.c index d6f8fc0..f12dd47 100644 --- a/kernel/src/mm/vmm.c +++ b/kernel/src/mm/vmm.c @@ -226,12 +226,12 @@ void vmm_map_user(pagemap_t *pm, uint64_t vaddr, uint64_t paddr, uint64_t pml2_entry = (vaddr >> 21) & 0x1ff; uint64_t pml1_entry = (vaddr >> 12) & 0x1ff; - uint64_t *pml3 = - __vmm_get_next_lvl(pm->toplevel, pml4_entry, flags, + + uint64_t *pml3 = __vmm_get_next_lvl(pm->toplevel, pml4_entry, flags | VMM_WRITABLE, true); // PML3 / Page Directory Pointer Entry - uint64_t *pml2 = __vmm_get_next_lvl(pml3, pml3_entry, flags, + uint64_t *pml2 = __vmm_get_next_lvl(pml3, pml3_entry, flags | VMM_WRITABLE, true); // PML2 / Page Directory Entry - uint64_t *pml1 = __vmm_get_next_lvl(pml2, pml2_entry, flags, + uint64_t *pml1 = __vmm_get_next_lvl(pml2, pml2_entry, flags | VMM_WRITABLE, true); // PML1 / Page Table Entry pml1[pml1_entry] = paddr | flags; diff --git a/kernel/src/sched/sched.c b/kernel/src/sched/sched.c index fe94da7..d358fff 100644 --- a/kernel/src/sched/sched.c +++ b/kernel/src/sched/sched.c @@ -153,6 +153,8 @@ void schedule(registers_t *regs) { if (curr_proc == NULL) curr_proc = proc_list; + log("sched - I choosed process %d\n", curr_proc->pid); + // log("sched - I choosed process %d\n", curr_proc->pid); memcpy(regs, &curr_proc->regs, sizeof(registers_t));