1 个不稳定版本
0.1.0 | 2020 年 4 月 12 日 |
---|
#1643 in 网络编程
478 星 & 25 关注者
450KB
8K SLoC
摘要
这是一个几乎完全使用 Rust 编写,且没有任何第三方依赖的启动加载程序和内核。此代码库中的一切都是您在代码上所需的所有内容。
构建
要求
要构建此项目,您需要 Rust、nasm
和 lld-link
(来自 LLVM 的链接器)。此启动加载程序和内核的构建方式与构建系统无关。它应该可以在 Linux、Windows、OSX、BSD 等操作系统上构建。
您可以从这里获取 nasm:[nasm](https://nasm.us/) 或通过 apt install nasm
您可以从这里获取 LLVM 二进制文件:[LLVM](https://llvm.net.cn/builds/) 或通过 apt install lld
您可以从这里获取 Rust:[Rust](https://rustup.rs/)。您必须使用 nightly Rust!
此项目需要您安装 i586-pc-windows-msvc
和 x86_64-pc-windows-msvc
Rust 目标。
rustuptarget add i586-pc-windows-msvc x86_64-pc-windows-msvc
特别是 nasm
、lld-link
、rustup
和 cargo
必须在您的 PATH 中。如果这些中的任何一个不在您的路径中,您可能需要创建指向特定版本的符号链接(例如:lld-link-10
)
构建
要构建此项目,只需运行 cargo run
即可。这将创建一个名为 pxe
的文件夹,其中包含需要通过TFTP服务器公开的文件夹。可选地,您可以将 pxe
文件夹中的文件复制到您现有的PXE部署文件夹中。
使用方法
此引导加载程序和内核需要PXE启动。它们以任何方式都不支持磁盘。所有操作都在网络上完成。要使用此引导加载程序和内核,您需要设置一个有效的PXE启动环境。这通过DHCP服务器和TFTP服务器完成。
TFTP服务器必须指向包含 chocolate_milk.boot
和 chocolate_milk.kern
的目录。DHCP服务器应配置为使用 chocolate_milk.boot
作为启动映像。这是一个特定于BIOS的引导加载程序,不会与EFI/UEFI兼容。
设计
构建系统
我们使用了一个基于Rust的构建系统,位于 src/main.rs
。我们使用Rust构建了这个构建系统,这样我们就不需要在构建过程中承担任何其他依赖。这个构建系统对安装的必需程序进行了一些检查,构建并扁平化了引导加载程序,并组装了引导加载程序。
引导加载程序
引导加载程序是一个简单的i586 Rust程序,以MSVC调用约定PE的形式发出。我们的构建系统 src/main.rs
将其扁平化为加载PE的内存映像。然后它直接附加到初始 bootloader/src/stage0.asm
入口存根。一旦进入32位模式并设置了选择器,我们就直接跳转到 bootloader::entry()
!