1 个不稳定版本
0.1.0 | 2020年4月26日 |
---|
#25 in #insertion
478 星 & 25 关注者
9KB
118 代码行,不包括注释
摘要
这是一个几乎完全用 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 服务器。
FTP服务器必须指向包含chocolate_milk.boot
和chocolate_milk.kern
的目录。同时,DHCP服务器应配置为使用chocolate_milk.boot
作为引导镜像。这是一个针对BIOS的引导加载程序,不适用于EFI/UEFI。
设计
构建系统
我们使用位于src/main.rs
的基于Rust的构建系统。我们使用Rust构建了构建系统,这样我们就不需要在构建过程中承担任何其他依赖。这个构建系统对所需的安装程序进行了一些检查,构建并扁平化引导加载程序,并组装引导加载程序。
引导加载程序
引导加载程序是一个简单的i586 Rust程序,按照MSVC调用约定生成PE。这个PE通过我们的构建系统src/main.rs
转换为加载到内存中的PE镜像。然后,它直接附加到初始bootloader/src/stage0.asm
入口占位符。一旦进入32位模式并设置选择符,我们就会直接跳转到bootloader::entry()
!
lib.rs
:
原子哈希表。允许在不需要锁的情况下进行线程安全的原子哈希表插入