x86_64-unknown-none
级别: 2
ELF 格式的独立/裸机 x86-64 二进制文件:固件、内核等。
目标维护者
- Harald Hoyer
[email protected]
, https://github.com/haraldh - Mike Leany, https://github.com/mikeleany
要求
此目标是交叉编译的。不支持 std
。没有默认的分配器,但是可以通过提供分配器来使用 alloc
。
默认情况下,为此目标生成的 Rust 代码不使用任何向量或浮点寄存器(例如,SSE、AVX)。这允许生成的代码在诸如内核之类的环境中运行,这些环境可能需要避免使用此类寄存器,或者可能对使用此类寄存器有特殊的考虑(例如,保存和恢复它们以避免破坏使用相同寄存器的用户空间代码)。您可以通过 rustc 的 -C target-feature=
代码生成选项,或者通过 Rust 代码中的 #[target_feature]
机制来更改代码生成以使用其他 CPU 功能。
默认情况下,使用此目标生成的代码应在任何 x86_64
硬件上运行;启用其他目标功能可能会提高此基准。
使用此目标生成的代码默认将使用 kernel
代码模型。您可以使用 rustc 的 -C code-model=
选项来更改此设置。
在 x86_64-unknown-none
上,extern "C"
使用标准的 System V 调用约定,没有红色区域。
此目标生成 ELF 格式的二进制文件。任何其他格式或二进制布局的特殊考虑都将需要链接器选项或链接器脚本。
构建目标
您可以通过将其添加到 config.toml
中的 target
列表中来构建支持此目标的 Rust。
[build]
build-stage = 1
target = ["x86_64-unknown-none"]
构建 Rust 程序
从 Rust 1.62 开始,预编译的工件通过 rustup
提供。
# install cross-compile toolchain
rustup target add x86_64-unknown-none
# target flag may be used with any cargo or rustc command
cargo build --target x86_64-unknown-none
测试
由于 x86_64-unknown-none
支持各种不同的环境,并且不支持 std
,因此此目标不支持运行 Rust 测试套件。
交叉编译工具链和 C 代码
如果您想将 C 代码与 Rust 一起编译(例如,对于具有 C 依赖项的 Rust crate),则需要一个合适的 x86_64
工具链。
Rust *可能*能够使用带有适当独立标志的 x86_64-linux-gnu-
工具链为此工具链构建(取决于该工具链的假设,请参见下文),或者您可能希望使用单独的 x86_64-unknown-none
(或 x86_64-elf-
)工具链。
在一些使用 ELF 二进制文件的 x86_64
主机上,如果主机 C 工具链没有引入与独立环境的预期不符的主机环境假设,则*可能*可以使用主机 C 工具链。否则,您可能需要一个单独的工具链进行独立/裸机开发,就像从非 x86_64
平台进行交叉编译时一样。