#bootloader #dhcp-server #kernel #x86-64 #tftp #boot #pure

app gamozolabs/server

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

1个不稳定版本

0.1.0 2020年4月25日

#8 in #tftp

478 星 & 25 关注者

27KB
468

摘要

这是一个几乎全部用Rust编写,且没有任何第三方依赖的引导加载程序和内核。这个代码库中包含了所有你需要用到的代码。

构建

要求

构建此项目需要Rust、nasmlld-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。

设计

构建系统

我们使用位于src/main.rs的基于Rust的构建系统。我们使用Rust构建了构建系统,这样我们就不必承担任何其他构建过程依赖项。此构建系统对所需的安装程序进行了一些检查,构建并扁平化了引导加载程序,并组装了引导加载程序。

引导加载程序

引导加载程序是一个简单的i586 Rust程序,按照MSVC调用约定生成PE。通过我们的构建系统src/main.rs将其转换为加载的PE的内存映像。然后直接附加到初始的bootloader/src/stage0.asm条目占位符。一旦进入32位模式并设置选择器后,我们直接跳转到bootloader::entry()

依赖项