#bootloader #kernel #hash-table #x86-64 #insertion #atomic #pure

nightly gamozolabs/aht

纯 Rust x86_64 引导加载程序和内核

1 个不稳定版本

0.1.0 2020年4月26日

#25 in #insertion

478 星 & 25 关注者

9KB
118 代码行,不包括注释

摘要

这是一个几乎完全用 Rust 编写的引导加载程序和内核,没有任何第三方依赖。这个代码库中包含了所有你需要用到的代码。

构建

要求

要构建此项目,你需要 Rust、nasmlld-link(来自 LLVM 的链接器)。这个引导加载程序和内核的构建方式完全相同,无论使用何种构建系统。它应该在 Linux、Windows、OSX、BSD 等系统上都能正常运行。

你可以从 这里 或通过 apt install nasm 获取 nasm。

你可以从 这里 或通过 apt install lld 获取 LLVM 二进制文件。

你可以从 这里 获取 Rust。你必须使用 nightly Rust!

此项目要求您安装 i586-pc-windows-msvcx86_64-pc-windows-msvc Rust 目标。

rustuptarget add i586-pc-windows-msvc x86_64-pc-windows-msvc

特别是 nasmlld-linkrustupcargo 必须在您的 PATH 中。如果其中之一不在您的路径中,您可能需要为特定版本创建符号链接(例如:lld-link-10

构建

要构建此项目,只需运行 cargo run 即可。这将创建一个名为 pxe 的文件夹,其中将包含需要通过 TFTP 服务器公开的文件夹。可选地,可以将 pxe 文件夹中的文件复制到您现有的 PXE 部署文件夹。

用法

此引导加载程序和内核需要 PXE 引导。它们不支持任何形式的磁盘。所有操作都通过网络进行。要使用此引导加载程序和内核,您需要设置有效的 PXE 引导环境。这需要 DHCP 服务器和 TFTP 服务器。

FTP服务器必须指向包含chocolate_milk.bootchocolate_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:

原子哈希表。允许在不需要锁的情况下进行线程安全的原子哈希表插入

无运行时依赖