Rust 语言本身包括以下几个部分:
编译器(rustc):将 Rust 代码编译为可执行文件或库。
标准库(std):提供常用的数据结构、算法、I/O 操作等。


Rust 工具链是一个更广泛的概念,包含了开发 Rust 应用程序所需的所有工具和组件
编译器(rustc):和 Rust 语言本身一样,编译器是工具链的核心部分。
Cargo:Rust 的包管理和构建工具。它用于管理依赖、构建项目、运行测试等。
Rustup:Rust 工具链的管理工具。它允许你安装和管理多个 Rust 版本和工具链(如 stable、beta、nightly)。
标准库(std):同样是工具链的一部分,提供了基础的库支持。
其他组件:如 rustfmt(代码格式化工具)、clippy(代码静态分析工具)、rust-docs(文档生成工具)等。


查看当前活跃的工具链和组件

rustup show

安装Rust工具链版本

rustup target add riscv64gc-unknown-none-elf

rust-toolchain.toml 文件用于指定项目所使用的 Rust 工具链版本和相关配置

[toolchain]
channel = "nightly-2023-10-01"  # 指定具体的 nightly 版本
components = ["rustfmt", "clippy"]
targets = ["riscv64imac-unknown-none-elf"]
profile = "default"  # 使用默认的安装配置

rust-toolchain.toml 文件的配置会影响整个项目,包括所有子工程(subproject)。

.cargo/config.toml

[build]
target = "riscv64imac-unknown-none-elf"

[target.riscv64imac-unknown-none-elf]
rustflags = [
    "-C", "link-arg=-Tlinker.ld",
]

项目级别或全局:.cargo/config.toml 文件可以放在项目的根目录,影响整个项目;也可以放在用户的主目录下(~/.cargo/config.toml),影响所有项目。
构建选项:配置默认的构建目标、编译器标志等。
目标平台:可以为特定目标平台配置特定的编译选项。


如果是idea开发的话, 需要配置--target riscv64gc-unknown-none-elf
命令行执行 cargo build 能识别 .cargo/config.toml配置, 但是idea的编译不能
image.png


rustup component remove cargo
rustup component add cargo

rust-objcopy 是 Rust 编译工具链的一部分,用于处理目标文件的复制、转换和操作。它是 GNU objcopy 的一个包装器,因此其用法与 GNU objcopy 相似。

 cargo install cargo-binutils 负责安装的rust-copy的

验证 rust-objcopy 是否可用: 确保 rust-objcopy 安装成功:

rust-objcopy --version

复制目标文件并更改格式: 将一个 ELF 格式的文件转换为二进制格式:

rust-objcopy --output-format binary input.elf output.bin

剥离(strip)目标文件中的调试信息: 从目标文件中剥离掉调试信息,可以减少文件大小:

rust-objcopy --output-format binary input.elf output.bin

保留特定节段: 保留指定的节段,并删除其它节段:

rust-objcopy --only-keep-debug input.elf debug.elf

重命名段: 将一个段重命名为另一个名称:

rust-objcopy --rename-section .oldname=.newname input.elf output.elf

删除特定段: 从目标文件中删除指定的段:

rust-objcopy --remove-section .comment input.elf output.elf

putao
8 声望1 粉丝

推动世界向前发展,改善民生。