#bootloader #kernel #range #x86-64 #set #u64 #inclusive

gamozolabs/rangeset

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

1个不稳定版本

0.1.0 2020年4月11日

#911 in Unix APIs

476 星 & 25 关注者

14KB
182

摘要

这是一个几乎完全用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中。如果其中之一不在您的路径中,您可能需要为特定版本创建符号链接(例如: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()


lib.rs:

这是一个库,提供包含非重叠 u64 包含范围集合的 RangeSet。可以使用 RangeSet 插入或删除 u64 范围,因此对于物理内存管理非常有用。

无运行时依赖