From 0edc5843309b15cfe63012f32cf683fd07092e29 Mon Sep 17 00:00:00 2001 From: jackfiled Date: Mon, 15 Jul 2024 16:08:48 +0800 Subject: [PATCH] init: repo --- .idea/.gitignore | 5 ++++ .idea/modules.xml | 8 ++++++ .idea/rCore.iml | 11 +++++++++ .idea/vcs.xml | 6 +++++ bootloader/rustsbi-qemu.bin | Bin 0 -> 32328 bytes os/.cargo/config.toml | 8 ++++++ os/.gitignore | 1 + os/Cargo.lock | 34 +++++++++++++++++++++++++ os/Cargo.toml | 7 ++++++ os/run.sh | 7 ++++++ os/src/console.rs | 33 +++++++++++++++++++++++++ os/src/entry.asm | 12 +++++++++ os/src/linker.ld | 48 ++++++++++++++++++++++++++++++++++++ os/src/main.rs | 19 ++++++++++++++ os/src/sbi.rs | 16 ++++++++++++ os/src/utils.rs | 31 +++++++++++++++++++++++ 16 files changed, 246 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/modules.xml create mode 100644 .idea/rCore.iml create mode 100644 .idea/vcs.xml create mode 100644 bootloader/rustsbi-qemu.bin create mode 100644 os/.cargo/config.toml create mode 100644 os/.gitignore create mode 100644 os/Cargo.lock create mode 100644 os/Cargo.toml create mode 100755 os/run.sh create mode 100644 os/src/console.rs create mode 100644 os/src/entry.asm create mode 100644 os/src/linker.ld create mode 100644 os/src/main.rs create mode 100644 os/src/sbi.rs create mode 100644 os/src/utils.rs diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..10b731c --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..a28d5b1 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/rCore.iml b/.idea/rCore.iml new file mode 100644 index 0000000..31fc107 --- /dev/null +++ b/.idea/rCore.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/bootloader/rustsbi-qemu.bin b/bootloader/rustsbi-qemu.bin new file mode 100644 index 0000000000000000000000000000000000000000..f9015b81a17ef461aec196971b2dec52957bf51f GIT binary patch literal 32328 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 M-#fkiADfr|19gLOQUCw| literal 0 HcmV?d00001 diff --git a/os/.cargo/config.toml b/os/.cargo/config.toml new file mode 100644 index 0000000..0d0d31e --- /dev/null +++ b/os/.cargo/config.toml @@ -0,0 +1,8 @@ +[build] +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/os/.gitignore b/os/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/os/.gitignore @@ -0,0 +1 @@ +/target diff --git a/os/Cargo.lock b/os/Cargo.lock new file mode 100644 index 0000000..0ddea58 --- /dev/null +++ b/os/Cargo.lock @@ -0,0 +1,34 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "os" +version = "0.1.0" +dependencies = [ + "sbi-rt", +] + +[[package]] +name = "sbi-rt" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c113c53291db8ac141e01f43224ed488b8d6001ab66737b82e04695a43a42b7" +dependencies = [ + "sbi-spec", +] + +[[package]] +name = "sbi-spec" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d4027cf9bb591a9fd0fc0e283be6165c5abe96cb73e9f0e24738c227f425377" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" diff --git a/os/Cargo.toml b/os/Cargo.toml new file mode 100644 index 0000000..7fb4302 --- /dev/null +++ b/os/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "os" +version = "0.1.0" +edition = "2021" + +[dependencies] +sbi-rt = { version = "0.0.2", features = ["legacy"] } diff --git a/os/run.sh b/os/run.sh new file mode 100755 index 0000000..bed9ec8 --- /dev/null +++ b/os/run.sh @@ -0,0 +1,7 @@ +cargo build --release + +qemu-system-riscv64 \ + -machine virt \ + -nographic \ + -bios ../bootloader/rustsbi-qemu.bin \ + -device loader,file=target/riscv64gc-unknown-none-elf/release/os \ No newline at end of file diff --git a/os/src/console.rs b/os/src/console.rs new file mode 100644 index 0000000..09da39f --- /dev/null +++ b/os/src/console.rs @@ -0,0 +1,33 @@ +use core::fmt; +use core::fmt::Write; +use crate::sbi::console_print; + +struct Stdout; + +impl Write for Stdout { + fn write_str(&mut self, s: &str) -> fmt::Result { + for c in s.chars() { + console_print(c as usize); + } + + Ok(()) + } +} + +pub fn print(args: fmt::Arguments) { + Stdout.write_fmt(args).unwrap() +} + +#[macro_export] +macro_rules! print { + ($fmt: literal $(, $($arg: tt)+)?) => { + $crate::console::print(format_args!($fmt $(, $($arg)+)?)); + } +} + +#[macro_export] +macro_rules! println { + ($fmt: literal $(, $($arg: tt)+)?) => { + $crate::console::print(format_args!(concat!($fmt, "\n") $(, $($arg)+)?)); + } +} \ No newline at end of file diff --git a/os/src/entry.asm b/os/src/entry.asm new file mode 100644 index 0000000..f983305 --- /dev/null +++ b/os/src/entry.asm @@ -0,0 +1,12 @@ + .section .text.entry + .global _start + _start: + la sp, boot_stack_top + call rust_main + + .section .bss.stack + .global boot_stack_lower_bound + boot_stack_lower_bound: + .space 4096 * 16 + .global boot_stack_top + boot_stack_top: diff --git a/os/src/linker.ld b/os/src/linker.ld new file mode 100644 index 0000000..8bcce1a --- /dev/null +++ b/os/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 : { + *(.rodata .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/os/src/main.rs b/os/src/main.rs new file mode 100644 index 0000000..0418b54 --- /dev/null +++ b/os/src/main.rs @@ -0,0 +1,19 @@ +#![no_std] +#![no_main] + +use core::arch::global_asm; +use crate::utils::clear_bss; + +mod utils; +mod sbi; +mod console; + +global_asm!(include_str!("entry.asm")); + +#[no_mangle] +fn rust_main() -> ! { + clear_bss(); + println!("Hello, rCore!"); + sbi::shutdown(false); +} + diff --git a/os/src/sbi.rs b/os/src/sbi.rs new file mode 100644 index 0000000..322fb0b --- /dev/null +++ b/os/src/sbi.rs @@ -0,0 +1,16 @@ +pub fn console_print(c: usize) { + #[allow(deprecated)] + sbi_rt::legacy::console_putchar(c); +} + +pub fn shutdown(failure: bool) -> ! { + use sbi_rt::{system_reset, Shutdown, NoReason, SystemFailure}; + + if failure { + system_reset(Shutdown, SystemFailure); + } else { + system_reset(Shutdown, NoReason); + } + + unreachable!() +} \ No newline at end of file diff --git a/os/src/utils.rs b/os/src/utils.rs new file mode 100644 index 0000000..9d5fdad --- /dev/null +++ b/os/src/utils.rs @@ -0,0 +1,31 @@ +use core::panic::PanicInfo; +use crate::println; +use crate::sbi::shutdown; + +#[panic_handler] +fn panic(info: &PanicInfo) -> ! { + if let Some(location) = info.location() { + println!("Panicked at {}:{} {}.", + location.file(), + location.line(), + info.message() + ); + } else { + println!("Panicked: {}.", info.message()); + } + + shutdown(true) +} + +pub fn clear_bss() { + extern "C" { + fn sbss(); + fn ebss(); + } + + for m in sbss as usize..ebss as usize { + unsafe { + (m as *mut u8).write_volatile(0) + } + } +} \ No newline at end of file