1个不稳定版本
0.1.0 | 2020年4月11日 |
---|
#380 in 操作系统
478 星 & 25 关注者
46KB
919 代码行
摘要
这是一个几乎完全用Rust编写的引导加载程序和内核,没有任何第三方依赖。此代码库中的所有代码都是您需要的。
构建
要求
要构建此项目,您需要Rust、nasm
、和 lld-link
(来自LLVM的链接器)。此引导加载程序和内核无论使用什么构建系统,构建方式都相同。它应该在Linux、Windows、OSX、BSD上构建良好。
您可以从这里或使用apt install nasm
获取nasm。
您可以从这里或使用apt install lld
获取LLVM二进制文件。
您可以从这里获取Rust。您必须使用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中。如果这些中的一个不在您的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()
!