#x86-64 #kernel #bios #boot #disk #tftp #pxe

nightly app gamozolabs/bootloader

纯Rust x86_64引导加载程序和内核

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-msvcx86_64-pc-windows-msvc Rust目标。

rustuptarget add i586-pc-windows-msvc x86_64-pc-windows-msvc

特别是 nasmlld-linkrustupcargo 必须在您的PATH中。如果这些中的一个不在您的PATH中,您可能需要创建到特定版本(例如:lld-link-10)的符号链接。

构建

要构建此项目,只需运行 cargo run。这将创建一个名为 pxe 的文件夹,其中包含需要通过TFTP服务器公开的文件夹。可选地,可以将文件从 pxe 文件夹复制到您现有的PXE部署文件夹。

使用方法

本引导加载程序和内核需要使用 PXE 启动。它们以任何形式都不支持磁盘。所有操作都通过网络进行。要使用此引导加载程序和内核,您需要设置一个有效的 PXE 启动环境。这需要使用 DHCP 服务器和 TFTP 服务器来完成。

TFTP 服务器必须指向包含 chocolate_milk.bootchocolate_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()

依赖项