You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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()引导函数所使用的参数。
  • _start() in _arch/__arch_name__/cpu/boot.s:
    1. 当核心不是core0第0号核心的时候挂起该CPU核心。
    2. 通过清零.bss程序段来初始化DRAM.
    3. 初始化堆栈指针(stack pointer.
    4. 跳转到arch/__arch_name__/cpu/boot.rs文件中定义的_start_rust()函数
  • _start_rust():
    1. 它调用了kernel_init(), 这个函数又调用了panic!(), panic函数最终把core0和其他核心一样挂起了。
  • 目前依赖 aarch64-cpu 程序库, 这个库零成本的包装了处理 CPU 资源时的“不安全”部分。
    • 详细请参考 _arch/__arch_name__/cpu.rs.

相比之前的变化diff

请检查英文版本,这是最新的。