关于操作系统:如何使用Assembly(NASM)引导加载程序编译Rust内核

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

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

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

如何编译NASM引导加载程序并将其与Rust内核链接?


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

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

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