Expand description
这个板块为内核提供链接脚本的文本,以及依赖于定制链接脚本的功能。
build.rs 文件可依赖此板块,并将 SCRIPT 文本常量写入链接脚本文件:
use std::{env, fs, path::PathBuf};
let ld = &PathBuf::from(env::var_os("OUT_DIR").unwrap()).join("linker.ld");
fs::write(ld, linker::SCRIPT).unwrap();
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rustc-link-arg=-T{}", ld.display());内核使用 boot0 宏定义内核启动栈和高级语言入口:
linker::boot0!(rust_main; stack = 4 * 4096);内核所在内核区域定义成 4 个部分(KernelRegionTitle):
- 代码段
- 只读数据段
- 数据段
- 启动数据段
启动数据段放在最后,以便启动完成后换栈。届时可放弃启动数据段,将其加入动态内存区。
用 KernelLayout 结构体定位、保存和访问内核内存布局。
Macros§
- boot0
- 定义内核入口。
Structs§
- AppIterator
- 应用程序迭代器。
- AppMeta
- 应用程序元数据。
- Kernel
Layout - 内核地址信息。
- Kernel
Region - 内核内存分区。
- Kernel
Region Iterator - 内核内存分区迭代器。
Enums§
- Kernel
Region Title - 内核内存分区名称。
Constants§
- NOBIOS_
SCRIPT - 链接脚本(nobios 模式)。
- SCRIPT
- 链接脚本。