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:
原子哈希表。允许在不需要锁的情况下进行线程安全的原子哈希表插入