From 5de7bac424b5357257d1bb912cdd326dd6007782 Mon Sep 17 00:00:00 2001 From: Tateisi Date: Sat, 2 Aug 2025 15:42:14 +0800 Subject: [PATCH] ch1:First instruction in kernel --- .cargo/config.toml | 7 ++++++- src/entry.asm | 4 ++++ src/linker.ld | 48 ++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 3 +++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 src/entry.asm create mode 100644 src/linker.ld diff --git a/.cargo/config.toml b/.cargo/config.toml index 6a5ba74..6ddcd53 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,2 +1,7 @@ [build] -target = "riscv64gc-unknown-none-elf" \ No newline at end of file +target = "riscv64gc-unknown-none-elf" + +[target.riscv64gc-unknown-none-elf] +rustflags = [ + "-Clink-arg=-Tsrc/linker.ld", "-Cforce-frame-pointers=yes" +] \ No newline at end of file diff --git a/src/entry.asm b/src/entry.asm new file mode 100644 index 0000000..cde07d2 --- /dev/null +++ b/src/entry.asm @@ -0,0 +1,4 @@ + .section .text.entry + .globl _start +_start: + li x1, 100 \ No newline at end of file diff --git a/src/linker.ld b/src/linker.ld new file mode 100644 index 0000000..02d26c6 --- /dev/null +++ b/src/linker.ld @@ -0,0 +1,48 @@ +OUTPUT_ARCH(riscv) +ENTRY(_start) +BASE_ADDRESS = 0x80200000; + +SECTIONS +{ + . = BASE_ADDRESS; + skernel = .; + + stext = .; + .text : { + *(.text.entry) + *(.text .text.*) + } + + . = ALIGN(4K); + etext = .; + srodata = .; + .rodata : { + *(.data .rodata.*) + *(.srodata .srodata.*) + } + + . = ALIGN(4K); + erodata = .; + sdata = .; + .data : { + *(.data .data.*) + *(.sdata .sdata.*) + } + + . = ALIGN(4K); + edata = .; + .bss : { + *(.bss.stack) + sbss = .; + *(.bss .bss.*) + *(.sbss .sbss.*) + } + + . = ALIGN(4K); + ebss = .; + ekernel = .; + + /DISCARD/ : { + *(.eh_frame) + } +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index f156fda..0feea96 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,3 +2,6 @@ #![no_main] mod lang_items; + +use core::arch::global_asm; +global_asm!(include_str!("entry.asm")); \ No newline at end of file