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

时间:2019-04-05 19:45:15

标签: rust operating-system kernel bootloader rust-cargo

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

所以我用Cargo创建了一个每晚的Rust项目,并在src / main.rs文件中禁用了std。现在,我试图将Assembly文件与Cargo项目链接,但没有成功。

我应该如何编译和链接NASM引导程序与Rust内核?

1 个答案:

答案 0 :(得分:1)

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

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

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