如何使用 Assembly (NASM) 引导加载程序编译 Rust 内核

How to compile a Rust kernel with an Assembly (NASM) bootloader

我有一个用 NASM 编写的简单的 2 阶段引导加载程序,我想继续使用 Rust 的 OS 内核。

所以我用 Cargo 创建了一个夜间 Rust 项目,并在 src/main.rs 文件中禁用了 std。现在我正在尝试 link 使用 Cargo 项目的程序集文件,但没有成功。

我应该如何使用 Rust 内核编译和 link NASM 引导加载程序?

几个小时后我编译了代码。

解决方案是(如 Michael Petch 所建议的),将汇编代码编译成静态 .o 文件,然后使用 xargo 和自定义目标编译 Rust 代码。我将 Rust 代码编译为静态库,而不是二进制文件,因此输出是 .a 目标文件,而不是可执行文件。

然后我使用 gcc 和 linker 脚本将目标文件 link 在一起,并将结果输出为 ELF 文件。之后,我使用 objcopy-O binary 标志将 ELF 文件复制到 .bin 文件。最后,我使用 dd 创建了一个映像文件,我可以从中启动。