1个不稳定版本
0.1.0 | 2020年4月25日 |
---|
#8 in #tftp
478 星 & 25 关注者
27KB
468 行
摘要
这是一个几乎全部用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。
设计
构建系统
我们使用位于src/main.rs
的基于Rust的构建系统。我们使用Rust构建了构建系统,这样我们就不必承担任何其他构建过程依赖项。此构建系统对所需的安装程序进行了一些检查,构建并扁平化了引导加载程序,并组装了引导加载程序。
引导加载程序
引导加载程序是一个简单的i586 Rust程序,按照MSVC调用约定生成PE。通过我们的构建系统src/main.rs
将其转换为加载的PE的内存映像。然后直接附加到初始的bootloader/src/stage0.asm
条目占位符。一旦进入32位模式并设置选择器后,我们直接跳转到bootloader::entry()
!