公司动态
如何编译Project Mu中的Rust代码:构建流程与文档规范完整教程
如何编译Project Mu中的Rust代码构建流程与文档规范完整教程【免费下载链接】muProject Mu Documentation项目地址: https://gitcode.com/gh_mirrors/mu12/mu编译 Project Mu 的 Rust 代码并不复杂本项目已把 Rust 构建完整集成进 UEFI 固件构建流程你只需装好 Rust 工具链用一条cargo make build命令即可单独编译、测试任意 Rust 模块并同步生成固件产物。本文面向新手带你走通从环境准备到构建、再到 Rust 文档规范的全流程。为什么 Project Mu 需要编译 Rust 代码Project Mu 是对 TianoCore EDK2 的模块化改造用于构建可扩展、可维护的现代 UEFI 固件。UEFI 固件长期以 C 语言编写而 Rust 凭借无需垃圾回收的强内存安全、严格的类型与并发约束正在成为固件开发的理想选择详见 docs/WhatAndWhy/rust.md。在 Project Mu 中Rust 代码会自然地融入固件编译与打包过程既支持纯 Rust 模块也支持 C/Rust 混合构建。理解这一背景能帮助你选对构建方式。一键式环境准备安装 Rust 编译工具链首次编译前请按以下清单准备环境完整说明见 docs/CodeDevelopment/rust_build.md更新仓库确保包含 Rust 构建支持的最新代码。安装 Rust 与 cargo从 Rust 官方入门页面下载安装用cargo --version验证。安装指定工具链版本号记录在含 Rust 代码的仓库根目录rust-toolchain.toml中当前为 1.85.0例如 Linux 下执行rustup toolchain install 1.85.0-x86_64-unknown-linux-gnu并添加rust-src组件。安装 cargo-make0.37.24与 cargo-tarpaulin0.31.5先装cargo binstall再用它一键安装这两个构建/覆盖率工具。 不想手动装Project Mu 提供了内置 Rust 与全套构建工具的 Dev Container 容器镜像开箱即用适合追求零配置体验的开发者。三个关键配置文件请务必认准文件作用Makefile.toml定义构建、测试任务与环境设置rust-toolchain.toml锁定仓库支持的精确工具链版本rustfmt.toml定义 Rust 代码格式化选项这些文件由 Mu DevOps 仓库统一同步保证各仓库构建行为一致。构建流程全解析cargo make 快速编译命令环境就绪后核心构建命令只有一条。在支持 Rust 模块的包目录下执行cargo make build 模块名常用参数-p PROFILEdevelopment默认或release-e ARCHIA32 | X64 | AARCH64 | LOCAL默认X64-e TARGET_TRIPLE交叉编译本地可执行工具时指定构建产物输出到target/[x86_64-unknown-uefi|i686-unknown-uefi]/[debug|release]/目录得到.efi或.rlib文件。测试与覆盖率同样一条命令搞定cargo make test 可选模块名 cargo make coverage 可选模块名不指定模块名时会测试全部包。两种构建入口单模块 vs 整包固件单模块构建上面的cargo make方式适合日常开发与验证。整包构建像普通包一样直接stuart build即可产出完整固件EFI 驱动与固件卷Rust 模块由构建规则自动编译。CI 场景则使用stuart_ci_build框架跑编译单测细节见 docs/CodeDevelopment/compile.md 与 docs/CodeDevelopment/test.md。构建架构认知Rust 代码放在哪个仓库编译Project Mu 采用严格的分层架构BaseCore → Common → Silicon → Platform依赖只能自上而下编译 Rust 代码前先确认它所在的层级与仓库BaseCore / Common 层如 MdePkg 等核心包Rust 模块通常在此配合.pytool/CISettings.py走 CI 构建。Platform 层平台仓库使用自己的平台配置文件走stuart_build流程。分层规则与文件布局的详细说明见 docs/WhatAndWhy/layout.md。支持的构建组合了解即可C Rust 混合INF 中混编Rust 源码不可有外部依赖纯 Rust 模块INF[Sources]中声明Cargo.toml直接生成.efi纯 Rust 模块 纯 Rust 库Cargo 依赖Rust 模块 C 库EDK II 依赖与 C 联编时Cargo.toml需指定crate-type [staticlib]C 模块 纯 Rust 库、6.纯 Rust 模块 纯 Rust 库完整矩阵见 docs/CodeDevelopment/rust_build.md。Rust 文档规范4 套模板快速上手写完能编译的代码只是第一步。Project Mu 要求对公开 crate、模块、类型与函数编写规范文档用cargo doc自动生成完整规范见 docs/CodeDevelopment/rust_documentation_conventions.mdCrate 模板放在lib.rs/main.rs顶部用//!注释含用途、Getting Started、Examples、License 等章节模块模板放在模块文件顶部//!注释描述模块内类型及其与 crate 的交互类型模板所有公开类型struct、enum必须用///注释重点说明构造/析构与性能影响函数模板每个公开函数至少一个示例并视情况补# Errors、# Safety、# Panics、# Lifetimes章节不要写 Arguments / Returns 章节记住核心口诀///注释下方项//!注释父级项文档行控制在 100 字符内不适用的小节直接省略。新手常见坑与检查清单工具链版本不匹配→ 以仓库根rust-toolchain.toml为准重新rustup toolchain install漏装 rust-src 组件→ 交叉编译 UEFI 目标时会失败记得rustup component add rust-src --toolchain 版本忘记指定模块名→cargo make build必须跟 Rust 包名C/Rust 混编缺 staticlib→ 与 C 联编时Cargo.toml的[lib]需声明crate-type [staticlib]贡献代码没写测试与文档→ CI 会拦截参考 docs/CodeDevelopment/requirements.md需要获取源码时可使用以下地址克隆仓库git clone https://gitcode.com/gh_mirrors/mu12/mu按照本文流程你已完成从工具链安装、单模块 Rust 编译、整包固件构建到文档规范的全链路掌握——这就是 Project Mu 中编译 Rust 代码的完整方法。【免费下载链接】muProject Mu Documentation项目地址: https://gitcode.com/gh_mirrors/mu12/mu创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考