Skip to content

Commit 6363652

Browse files
committed
update readme for ch1
Signed-off-by: YdrMaster <[email protected]>
1 parent 62ba972 commit 6363652

File tree

2 files changed

+15
-17
lines changed

2 files changed

+15
-17
lines changed

Cargo.lock

+10-10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ch1/README.md

+5-7
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,8 @@ build.rs 的用法见[文档](https://doc.rust-lang.org/cargo/reference/build-sc
2525

2626
```ld
2727
OUTPUT_ARCH(riscv)
28-
ENTRY(_start)
2928
SECTIONS {
30-
. = 0x80200000;
31-
.text : {
29+
.text 0x80200000 : {
3230
*(.text.entry)
3331
*(.text .text.*)
3432
}
@@ -48,11 +46,11 @@ SECTIONS {
4846
}
4947
```
5048

51-
1. 为了被引导,它的 `.text` 在最前面。一般是 `.rodata` 在最前面。
52-
2. 正常情况下,裸机应用程序需要清除自己的 `.bss` ,所以需要定义全局符号以便动态定位 `.bss`。但这一章的程序并不依赖 `.bss`,所以没有导出符号。
49+
1. 为了被引导,它的 `.text` 在最前面。一般是 `.rodata` 在最前面。`.text` 的最前面是 `.text.entry`,有且只有一个汇编入口放在这个节,实现引导;
50+
2. 正常情况下,裸机应用程序需要清除自己的 `.bss` ,所以需要定义全局符号以便动态定位 `.bss`。但这一章的程序并不依赖 清空的 `.bss`,所以没有导出符号`.bss` 本身仍然需要,因为栈会放在里面
5351

5452
## 工作流程解读
5553

5654
1. SBI 初始化完成后,将固定跳转到 0x8020_0000 地址;
57-
2. 根据链接脚本,`_start` 函数被放置在这个地址。这是一个裸函数[`#[naked]`](https://github.com/rust-lang/rust/issues/90957)),编译器不会为它添加任何序言和尾声,因此可以在没有栈的情况下执行。这个函数将栈指针指向预留的栈空间,然后跳转到 `rust_main` 函数;
58-
3. `rust_main` 函数在一个最简单的循环打印调用 sbi 打印 `Hello, world!` 字符串,然后关机
55+
2. 根据链接脚本,汇编入口函数被放置在这个地址。它叫做 `_start`,这个名字是特殊的!GNU LD 及兼容其脚本的链接器会将这个名字认为是默认的入口,否则需要指定。这个函数是一个 rust 裸函数[`#[naked]`](https://github.com/rust-lang/rust/issues/90957)),编译器不会为它添加任何序言和尾声,因此可以在没有栈的情况下执行。它将栈指针指向预留的栈空间,然后跳转到 `rust_main` 函数;
56+
3. `rust_main` 函数在一个最简单的循环打印调用 sbi 打印 `Hello, world!` 字符串,然后关机

0 commit comments

Comments
 (0)