From 7a46c9fcf021c5242431ef6dcf229ab6be68c4a4 Mon Sep 17 00:00:00 2001 From: Alissa Tung Date: Wed, 8 Mar 2023 09:48:03 +0800 Subject: [PATCH] boot: intro RustSBI (#5) * *: debug * debug: add gdb * chore: add conn gdb * sbi: update * fix: boot kernel (#3) * kernel * revert 0 * revert 1 * revert 2 --------- Co-authored-by: lihua * chore: boot logs --------- Co-authored-by: lihua --- Makefile | 20 ++++++++++++++++--- external/rustsbi-qemu.bin | Bin 0 -> 32480 bytes kernel/entry.S | 26 ++++++++++++------------- kernel/kernel.ld | 6 +++--- kernel/main.c | 39 +++++++++++++++++++++++++------------- kernel/memlayout.h | 2 +- shell.nix | 2 +- 7 files changed, 60 insertions(+), 35 deletions(-) create mode 100644 external/rustsbi-qemu.bin diff --git a/Makefile b/Makefile index 11e11cd..399afff 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,8 @@ K=kernel U=user +BOOTLOADER = ./external/rustsbi-qemu.bin + OBJS = \ $K/entry.o \ $K/start.o \ @@ -163,7 +165,7 @@ ifndef CPUS CPUS := 3 endif -QEMUOPTS = -machine virt -bios none -kernel $K/kernel -m 128M -smp $(CPUS) -nographic +QEMUOPTS = -machine virt -bios $(BOOTLOADER) -kernel $K/kernel -m 128M -smp $(CPUS) -nographic QEMUOPTS += -global virtio-mmio.force-legacy=false QEMUOPTS += -drive file=fs.img,if=none,format=raw,id=x0 QEMUOPTS += -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 @@ -185,10 +187,12 @@ fmt: cd ./rs_src/xv6/ && make fmt .PHONY: rs-os +RS_KERNEL := ./rs_src/xv6/xv6-kernel/target/riscv64gc-unknown-none-elf/release/xv6-kernel rs-os: $(OBJS) $K/kernel.ld $U/initcode cd ./rs_src/xv6/ && make all -RS_KERNEL := ./rs_src/xv6/xv6-kernel/target/riscv64gc-unknown-none-elf/release/xv6-kernel -RS_QEMUOPTS = -machine virt -bios none -kernel $(RS_KERNEL) -m 128M -smp $(CPUS) -nographic + rust-objcopy --binary-architecture=riscv64 $(RS_KERNEL) --strip-all -O binary $(RS_KERNEL).bin +RS_QEMUOPTS = -machine virt -bios $(BOOTLOADER) -device loader,file=$(RS_KERNEL).bin,addr=0x80200000 +RS_QEMUOPTS += -m 128M -smp $(CPUS) -nographic RS_QEMUOPTS += -global virtio-mmio.force-legacy=false RS_QEMUOPTS += -drive file=fs.img,if=none,format=raw,id=x0 RS_QEMUOPTS += -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 @@ -196,6 +200,10 @@ RS_QEMUOPTS += -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 rs-qemu: rs-os fs.img $(QEMU) $(RS_QEMUOPTS) +rs-qemu-gdb: rs-os .gdbinit fs.img + @echo "*** Now run 'gdb' in another window." 1>&2 + $(QEMU) $(RS_QEMUOPTS) -S $(QEMUGDB) + debug-sym: $K/kernel rs-os $(OBJDUMP) -t $K/kernel | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > debug_c.sym $(OBJDUMP) -t $(RS_KERNEL) | sed '1,/SYMBOL TABLE/d; s/ .* / /; /^$$/d' > debug_rs.sym @@ -203,3 +211,9 @@ debug-sym: $K/kernel rs-os show-debug-sym: debug-sym diff -u --color debug_c.sym debug_rs.sym + +conn-gdb: + (gdb \ + -ex 'file $(RS_KERNEL)' \ + -ex 'set arch riscv:rv64' \ + -ex 'target remote localhost:${GDBPORT}') diff --git a/external/rustsbi-qemu.bin b/external/rustsbi-qemu.bin new file mode 100644 index 0000000000000000000000000000000000000000..463cfa94a5e6d08eb07c1258246743293522c466 GIT binary patch literal 32480 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 {}; in pkgs.pkgsCross.riscv64.mkShell { - packages = with pkgs; [alejandra clang-tools fd gcc qemu]; + packages = with pkgs; [alejandra cargo-binutils clang-tools fd gcc gdb qemu]; }