From 93abdf8dac67806361551a466d2cae3130824110 Mon Sep 17 00:00:00 2001 From: cowmonk Date: Mon, 21 Jul 2025 14:10:43 -0700 Subject: [PATCH] QEMU debugging via LLDB or optionally GDB --- Makefile | 31 ++++++++++++++++++++++------- README.md | 28 ++++++++++++++++++++++++++ kernel/drivers/video/framebuffer.o | Bin 0 -> 29904 bytes kernel/drivers/video/vga.o | Bin 0 -> 9712 bytes kernel/init/kernel.o | Bin 0 -> 7088 bytes kernel/klibc/stdio.o | Bin 0 -> 6576 bytes kernel/klibc/string.o | Bin 0 -> 6920 bytes kernel/x86/gdt.o | Bin 0 -> 4936 bytes scripts/limine-git.sh | 4 ++++ scripts/run-gdb | 21 +++++++++++++++++++ 10 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 kernel/drivers/video/framebuffer.o create mode 100644 kernel/drivers/video/vga.o create mode 100644 kernel/init/kernel.o create mode 100644 kernel/klibc/stdio.o create mode 100644 kernel/klibc/string.o create mode 100644 kernel/x86/gdt.o create mode 100755 scripts/run-gdb diff --git a/Makefile b/Makefile index bad4f80..29fe117 100644 --- a/Makefile +++ b/Makefile @@ -1,22 +1,39 @@ all: iso iso: kernel limine + @echo "Copying kernel to isodir..." cp -v ./kernel/bin/cowos ./isodir/boot/ - + @echo "Creating ISO image..." 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 \ - isodir -o cowos.iso - + -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 \ + isodir -o cowos.iso + @echo "Installing Limine BIOS..." ./limine/limine bios-install cowos.iso kernel: - make -C ./kernel/ all + @echo "Buliding kernel..." + make -C ./kernel/ limine: kernel + @echo "Setting up Limine..." ./scripts/limine-git.sh clean: + @echo "Cleaning up..." rm cowos.iso make -C ./kernel/ clean + +run: + @echo "Running cowos in QEMU..." + @if [ "$(DEBUG)" = "1" ]; then \ + echo "Debug mode: Starting QEMU with LLDB..."; \ + qemu-system-x86_64 -cdrom cowos.iso -m 512M -serial stdio -s -S & \ + echo "Launching LLDB..."; \ + lldb --arch x86_64 -o "gdb-remote localhost:1234" ./kernel/bin/cowos; \ + else \ + qemu-system-x86_64 -cdrom cowos.iso -m 512M -serial stdio; \ + fi + +.PHONY: all iso kernel limine clean run diff --git a/README.md b/README.md index 534f335..dc5061c 100644 --- a/README.md +++ b/README.md @@ -15,13 +15,41 @@ You'll need a few things: - xorriso (iso creation) - git - make + +### OPTIONAL: - qemu (for virtual machine) +- LLDB (debugging purposes) After acquiring those just run make and it'll do everything for you: ```bash make ``` +By default the kernel is compiled with debug symbols, if you would like to avoid this, you can simply override the CFLAGS: +```bash +cd kernel/ # it is recommended to go to the actual directory yourself +make CFLAGS="-s -O3 -pipe" +cd .. # return to root +make +``` +Eventually in the future this will be changed to be something much more convienent, however for now the inclusion of debug symbols is nessacary for development. + +## RUNNING +There is now a script to automate running cowos, although it's quite simple right now, this is important for the future as cowos will eventually require a root partition and other things as it grows to userspace slowly. To run, simply run this in the root of the repository: +```bash +make run # This will require qemu +``` + +For developers, running with the DEBUG flag will launch lldb with qemu to help debug issues with cowos: +```bash +make DEBUG=1 run +``` +if you do not like LLDB, I included a script called `run-gdb` in the `scripts/` directory for the gdb fans out there. I personally want to keep this project as gnu-free as possible, since I want cowos to not be GNU/cowos, I want it to just be cowos. And this means that I will even avoid anything as simple as the debugger being used to be non-GNU. Run in the root like so: +```bash +./scripts/run-gdb +``` +It will automatically exit qemu if gdb is exited, and by default gdb will run in tui mode. + # Credits - [Limine](https://github.com/limine-bootloader/limine): modern, advanced, portable, multiprotocol bootloader and boot manager. diff --git a/kernel/drivers/video/framebuffer.o b/kernel/drivers/video/framebuffer.o new file mode 100644 index 0000000000000000000000000000000000000000..93e1be0ac26589a14d08dfb275c4391dfd85f59a GIT binary patch literal 29904 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 literal 0 HcmV?d00001 diff --git a/kernel/drivers/video/vga.o b/kernel/drivers/video/vga.o new file mode 100644 index 0000000000000000000000000000000000000000..5565817a2de3e7b8f58bf8ea9e14b64662e9884c GIT binary patch literal 9712 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 BQ!xMl literal 0 HcmV?d00001 diff --git a/kernel/klibc/stdio.o b/kernel/klibc/stdio.o new file mode 100644 index 0000000000000000000000000000000000000000..7cac39cfa3aa3cab478dfc888697e441ac07dd41 GIT binary patch literal 6576 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 O_=kA|V)XqY=l^e#uNhwe literal 0 HcmV?d00001 diff --git a/kernel/klibc/string.o b/kernel/klibc/string.o new file mode 100644 index 0000000000000000000000000000000000000000..fae87dc679c306c7f1342834830da763439d4fb8 GIT binary patch literal 6920 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 RPxFB`%N0n`f2j2Ke+m19;G_Tm literal 0 HcmV?d00001 diff --git a/scripts/limine-git.sh b/scripts/limine-git.sh index 6bc1771..8e7a18e 100755 --- a/scripts/limine-git.sh +++ b/scripts/limine-git.sh @@ -11,4 +11,8 @@ if [ ! -d ./limine/ ]; then cp -v limine/BOOTX64.EFI isodir/EFI/BOOT/ cp -v limine/BOOTIA32.EFI isodir/EFI/BOOT/ +else + echo "Limine is already setup! Skipping..." fi + + diff --git a/scripts/run-gdb b/scripts/run-gdb new file mode 100755 index 0000000..17610f1 --- /dev/null +++ b/scripts/run-gdb @@ -0,0 +1,21 @@ +#!/bin/sh + +echo "Starting QEMU with GDB server (localhost:1234)..." +qemu-system-x86_64 -cdrom cowos.iso -m 512M -serial stdio -s -S & +QEMU_PID=$! + +sleep 1 # just in case so we let it cook + +if ! ps -p $QEMU_PID > /dev/null; then + echo "Error: QEMU failed to start." + exit 1 +fi + +echo "Launching GDB in TUI mode..." +gdb --tui \ + -ex "file ./kernel/bin/cowos" \ + -ex "target remote localhost:1234" \ + +# kill QEMU when GDB exits +echo "GDB exited. Terminating QEMU..." +kill $QEMU_PID 2>/dev/null