diff --git a/bootloader/rustsbi-k210.bin b/bootloader/rustsbi-k210.bin index d83a7a0e..e696137a 100755 Binary files a/bootloader/rustsbi-k210.bin and b/bootloader/rustsbi-k210.bin differ diff --git a/bootloader/rustsbi-qemu.bin b/bootloader/rustsbi-qemu.bin index 514b37c8..5ccab433 100755 Binary files a/bootloader/rustsbi-qemu.bin and b/bootloader/rustsbi-qemu.bin differ diff --git a/os/Makefile b/os/Makefile index 510b0a63..64190e53 100644 --- a/os/Makefile +++ b/os/Makefile @@ -3,7 +3,6 @@ TARGET := riscv64gc-unknown-none-elf MODE := release KERNEL_ELF := target/$(TARGET)/$(MODE)/os KERNEL_BIN := $(KERNEL_ELF).bin -KERNEL_ENTRY_PA := 0x80020000 DISASM_TMP := target/$(TARGET)/$(MODE)/asm FS_IMG := ../user/target/$(TARGET)/$(MODE)/fs.img SDCARD := /dev/sdb @@ -13,6 +12,14 @@ APPS := ../user/src/bin BOARD ?= qemu SBI ?= rustsbi BOOTLOADER := ../bootloader/$(SBI)-$(BOARD).bin +K210_BOOTLOADER_SIZE := 131072 + +# KERNEL ENTRY +ifeq ($(BOARD), qemu) + KERNEL_ENTRY_PA := 0x80200000 +else ifeq ($(BOARD), k210) + KERNEL_ENTRY_PA := 0x80020000 +endif # Run K210 K210-SERIALPORT = /dev/ttyUSB0 @@ -55,7 +62,10 @@ $(FS_IMG): $(APPS) $(APPS): kernel: + @echo Platform: $(BOARD) + @cp src/linker-$(BOARD).ld src/linker.ld @cargo build --release --features "board_$(BOARD)" + @rm src/linker.ld clean: @cargo clean @@ -81,7 +91,7 @@ ifeq ($(BOARD),qemu) -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 else @cp $(BOOTLOADER) $(BOOTLOADER).copy - @dd if=$(KERNEL_BIN) of=$(BOOTLOADER).copy bs=131072 seek=1 + @dd if=$(KERNEL_BIN) of=$(BOOTLOADER).copy bs=$(K210_BOOTLOADER_SIZE) seek=1 @mv $(BOOTLOADER).copy $(KERNEL_BIN) @sudo chmod 777 $(K210-SERIALPORT) python3 $(K210-BURNER) -p $(K210-SERIALPORT) -b 1500000 $(KERNEL_BIN) diff --git a/os/src/linker.ld b/os/src/linker-k210.ld similarity index 100% rename from os/src/linker.ld rename to os/src/linker-k210.ld diff --git a/os/src/linker-qemu.ld b/os/src/linker-qemu.ld new file mode 100644 index 00000000..6b06e916 --- /dev/null +++ b/os/src/linker-qemu.ld @@ -0,0 +1,50 @@ +OUTPUT_ARCH(riscv) +ENTRY(_start) +BASE_ADDRESS = 0x80200000; + +SECTIONS +{ + . = BASE_ADDRESS; + skernel = .; + + stext = .; + .text : { + *(.text.entry) + . = ALIGN(4K); + strampoline = .; + *(.text.trampoline); + . = ALIGN(4K); + *(.text .text.*) + } + + . = ALIGN(4K); + etext = .; + srodata = .; + .rodata : { + *(.rodata .rodata.*) + } + + . = ALIGN(4K); + erodata = .; + sdata = .; + .data : { + *(.data .data.*) + } + + . = ALIGN(4K); + edata = .; + sbss_with_stack = .; + .bss : { + *(.bss.stack) + sbss = .; + *(.bss .bss.*) + } + + . = ALIGN(4K); + ebss = .; + ekernel = .; + + /DISCARD/ : { + *(.eh_frame) + } +} \ No newline at end of file