diff --git a/ch1/src/book.md b/ch1/src/book.md new file mode 100644 index 0000000..e64c32a --- /dev/null +++ b/ch1/src/book.md @@ -0,0 +1,35 @@ +欢迎来到RustSBI系列教程!本系列教程希望从浅入深,详细而全面地介绍RustSBI和 +RISC-V SBI的开发技术,并以QEMU Virt为例给出一个RustSBI的裸机参考实现。 + +RISC-V SBI是RISC-V架构上机器态固件部分的技术标准,内核、引导程序可借助它 +完成内核的基础功能。它分为标准扩展和自定义扩展两个部分。 +标准扩展提供内核运行的基本功能,内核借助它实现多核管理、核间中断和性能管理等基础特性。 +自定义扩展的功能涵盖安全环境、调试器等多个方面,但它由具体的SBI固件厂家规定和实现, +不属于RISC-V SBI规定的标准扩展。因此,本教程将仅涵盖RISC-V SBI的各个标准扩展。 + +为了阅读本系列教程,我们假定读者已经对RISC-V基础指令集架构有一定的认识, +并对Rust语言程序设计有所了解。如果读者尚未准备相关前置知识,以下列出的参考文献 +可能对您有帮助。感谢读者的理解和支持! + +# 机器态裸机应用程序 + +裸机RISC-V的系统软件架构由机器态、内核态和用户态组成。内核态提供内核可利用的页表系统, +而用户态专用于内核之上无特权的用户程序。为了运行具有硬件最高权限,并服务于内核的 +固件支持部分,SBI固件部分将这些代码运行在机器态,以提供内核、引导程序需要的SBI功能。 + +//todo:严格意义上讲,还有HS态(宿主态) +// todo: 金字塔图 + +## `no_std`下的入口函数 + +## 什么是panic? + +## 链接脚本 + +为了启动SBI固件,各个具体的SoC平台都有自己的裸机启动流程,也可能有一定的映像格式约束。 +幸运的是,QEMU平台的SBI固件启动方法相当容易。要将SBI固件在64位的QEMU RISC-V平台启动, +将它的镜像和入口地址都放置在`0x80200000`即可。 + +## 运行编程语言 + +## 接下来要做的是…… diff --git a/ch1/src/book.rs b/ch1/src/book.rs deleted file mode 100644 index 5907a23..0000000 --- a/ch1/src/book.rs +++ /dev/null @@ -1,5 +0,0 @@ -//! 这是书! -//! -//! - [`rust_main`](crate::rust_main) 是一个重要的函数! -//! - [`UART`](crate::UART) 是一个重要的常量! -//! - [`book`](crate::book) 是一个重要的模块! diff --git a/ch1/src/main.rs b/ch1/src/main.rs index 464aa0b..1aa760f 100644 --- a/ch1/src/main.rs +++ b/ch1/src/main.rs @@ -7,7 +7,8 @@ #![feature(naked_functions, asm_const)] #![deny(warnings, missing_docs, rustdoc::broken_intra_doc_links)] -mod book; +#[doc = include_str!("book.md")] +mod book {} static HELLO: &[u8] = b"Hello"; static WORLD: &[u8] = b", rustsbi!\n";