1个不稳定版本
0.1.0 | 2020年4月11日 |
---|
#911 in Unix APIs
476 星 & 25 关注者
14KB
182 行
摘要
这是一个几乎完全用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中。如果其中之一不在您的路径中,您可能需要为特定版本创建符号链接(例如: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()
!
lib.rs
:
这是一个库,提供包含非重叠 u64
包含范围集合的 RangeSet
。可以使用 RangeSet
插入或删除 u64
范围,因此对于物理内存管理非常有用。