如何使用 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
创建了一个映像文件,我可以从中启动。
我有一个用 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
创建了一个映像文件,我可以从中启动。