1个不稳定版本
0.1.0 | 2020年4月11日 |
---|
#32 in #pe
478 星级 & 25 关注者
6KB
97 行
摘要
这是一个几乎完全用Rust编写的bootloader和kernel,没有任何第三方依赖。这个代码库中的一切都是你需要的。
构建
要求
构建此项目需要Rust、nasm
和lld-link
(来自LLVM的链接器)。这个bootloader和kernel无论构建系统如何都是相同的构建方式。它应该可以在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不兼容。
设计
构建系统
我们使用一个基于Rust的构建系统,位于src/main.rs
。我们在Rust中构建了这个构建系统,这样我们就不需要在构建过程中承担任何其他依赖。这个构建系统对需要构建的已安装程序进行了一些检查,构建并扁平化引导加载程序,并组装引导加载程序。
引导加载程序
引导加载程序是一个简单的i586 Rust程序,按照MSVC调用约定PE生成。我们的构建系统src/main.rs
将其扁平化为加载的PE内存映像。然后,它直接附加到初始的bootloader/src/stage0.asm
入口占位符。一旦进入32位模式并设置选择器后,我们就直接跳转到bootloader::entry()
!
lib.rs
:
支持基本的x86_64和i386的PE解析器。目前这个解析器不支持重定位。