mirror of
https://github.com/cowmonk/cowos.git
synced 2025-10-27 14:33:27 +00:00
QEMU debugging via LLDB or optionally GDB
This commit is contained in:
parent
4a304f7b63
commit
93abdf8dac
10 changed files with 77 additions and 7 deletions
31
Makefile
31
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
|
||||
|
|
|
|||
28
README.md
28
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.
|
||||
|
||||
|
|
|
|||
BIN
kernel/drivers/video/framebuffer.o
Normal file
BIN
kernel/drivers/video/framebuffer.o
Normal file
Binary file not shown.
BIN
kernel/drivers/video/vga.o
Normal file
BIN
kernel/drivers/video/vga.o
Normal file
Binary file not shown.
BIN
kernel/init/kernel.o
Normal file
BIN
kernel/init/kernel.o
Normal file
Binary file not shown.
BIN
kernel/klibc/stdio.o
Normal file
BIN
kernel/klibc/stdio.o
Normal file
Binary file not shown.
BIN
kernel/klibc/string.o
Normal file
BIN
kernel/klibc/string.o
Normal file
Binary file not shown.
BIN
kernel/x86/gdt.o
Normal file
BIN
kernel/x86/gdt.o
Normal file
Binary file not shown.
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
21
scripts/run-gdb
Executable file
21
scripts/run-gdb
Executable file
|
|
@ -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
|
||||
Loading…
Add table
Add a link
Reference in a new issue