mirror of
https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials.git
synced 2024-11-11 07:10:59 +00:00
1.4 KiB
1.4 KiB
教程 02 - 执行初始化
tl;dr
- 我们拓展了
boot.S
,在第一次启动的时候调用Rust代码。 在跳转到rust代码前,对运行时进行了一些初始化工作。 - Rust通过调用
panic()
挂起CPU。 - 再次运行
make qemu
看看新增加的代码是怎么运行的。
值得注意的变化
- 链接脚本(linker script)中的变化:
- 新程序段(sections):
.rodata
,.got
,.data
,.bss
. - 使用一个独立的位置(
.text._start_arguments
)来保存_start()
引导函数所使用的参数。
- 新程序段(sections):
_start()
in_arch/__arch_name__/cpu/boot.s
:- 当核心不是
core0
第0号核心的时候,挂起该CPU核心。 - 通过清零
.bss
程序段来初始化DRAM
. - 初始化堆栈指针(
stack pointer
). - 跳转到
arch/__arch_name__/cpu/boot.rs
文件中定义的_start_rust()
函数
- 当核心不是
_start_rust()
:- 它调用了
kernel_init()
, 这个函数又调用了panic!()
, panic函数最终把core0
和其他核心一样挂起了。
- 它调用了
- 目前依赖 aarch64-cpu 程序库, 这个库零成本的包装了处理 CPU 资源时的“不安全”部分。
- 详细请参考
_arch/__arch_name__/cpu.rs
.
- 详细请参考
相比之前的变化(diff)
请检查英文版本,这是最新的。