尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

为什么微软要在UEFI固件中引入Rust?Project Mu Rust开发实战指南

为什么微软要在UEFI固件中引入Rust?Project Mu Rust开发实战指南 为什么微软要在UEFI固件中引入RustProject Mu Rust开发实战指南【免费下载链接】muProject Mu Documentation项目地址: https://gitcode.com/gh_mirrors/mu12/muProject Mu是微软开源的 UEFI 固件开发框架Project Mu Documentation 仓库为其官方文档库它率先在固件构建系统中引入Rust 支持让 UEFI 驱动可以像普通 Rust crate 一样开发、测试和打包。本文用大白话讲清楚微软为什么要在 UEFI 固件中引入 Rust以及新手如何快速上手 Project Mu 的 Rust 开发环境。一、为什么 UEFI 固件需要 Rust1.1 C 语言的老毛病在固件世界被放大绝大多数 UEFI 固件用 C 语言写成而 C 的空指针解引用、缓冲区溢出、指针误用等问题在操作系统里可能只是崩溃在固件里却可能是致命的——因为固件是整个系统信任链的最底层️安全固件处于可信计算基TCB根部。攻击者发现操作系统防护越来越强正把矛头转向固件而多数 UEFI 固件至今连 DEP、堆栈保护、ASLR 等基础防护都缺失。⚡性能用户按下电源键就期望立刻开机固件必须跑得快、体积小不能有垃圾回收器的额外开销。复杂性现代 PC 固件动辄上百万行 C 代码还要对接各芯片厂商的专有代码出错空间极小。一句话要替换一个50 岁的 C 语言代码库必须找到一个既安全、又高性能、还能和 C 共存的替代者。1.2 Rust无 GC 的内存安全 无缝 C 互操作这正是 Rust 的主场能力对固件的意义编译期内存安全无 GC 开销从根上消灭溢出、悬垂指针类漏洞性能依然极致强类型与并发规则杜绝底层软件中常见的隐晦 bug受控的unsafe逃生舱需要时可与现有 C 代码协作支持渐进式迁移与 C 精确的数据布局互操作可分阶段把旧 C 代码逐步替换为 Rust1.3 不止是语言更是生态Rust 还带来了 C 时代固件开发者很少拥有的现代体验官方包管理器 Cargo、开箱即用的格式化工具 rustfmt 与 linter、高质量的 crate 生态例如 UEFI 专用的 r-efi、以及出色的编译器报错和文档工具——让固件开发也能接入现代软件社区。 完整论述见docs/WhatAndWhy/rust.mdRust 动机与docs/WhatAndWhy/features.md特性列表。二、Project Mu 中的 Rust 如何落地Project Mu 采用严格的依赖分层架构BaseCore基础层→ Common通用层→ Silicon芯片层→ Platform平台层依赖只能自上而下。Rust 模块通过构建系统的构建规则如Rust-To-Lib-File、Toml-File自然融入这套分层参与固件编译与打包。Rust 支持目前已在 QEMU Q35 开放虚拟平台Mu Tiano Platforms 仓库的 DXE 阶段落地作为演示与 CI 测试载体。 分层原理详见docs/WhatAndWhy/layout.md。三、Project Mu Rust 开发环境快速上手3.1 一键式安装步骤5 个关键工具官方推荐按 docs/CodeDevelopment/rust_build.md 的思路安装核心是这 5 样从 Rust 官网安装rustc和cargo按仓库根目录rust-toolchain.toml指定的版本安装工具链当前为 1.85.0并附加rust-src组件通过cargo binstall安装cargo-make构建运行器相当于固件构建中的快捷命令安装cargo-tarpaulin测试覆盖率工具懒人方案直接使用 Mu DevOps 提供的开发容器Rust 全套工具开箱即用。 项目中的Makefile.toml任务定义、rustfmt.toml格式规范、rust-toolchain.toml工具链版本三个文件会从公共源自动同步保证各仓库行为一致。3.2 最快配置方法cargo make 三大命令无需记忆冗长参数日常开发只需三个命令构建单个模块cargo make build 模块名可选-e ARCHX64/AARCH64默认 X64测试模块cargo make test [模块名]不指定则全部测试查看覆盖率cargo make coverage [模块名]构建产物位于target/[x86_64|i686]-unknown-uefi/[debug|release]/目录下扩展名为.efi驱动或.rlib库。3.3 六种构建组合覆盖全部 C/Rust 混合场景#组合方式说明1INF 中 C Rust 源码混合Rust 不能带外部依赖2纯 Rust 模块Cargo.toml放入 INF 的[Sources]节3纯 Rust 模块 纯 Rust 库支持 Cargo 依赖4Rust 模块 C 库EDK II 依赖Cargo 需使用staticlib5C 模块 纯 Rust 库EDK II 依赖6纯 Rust 模块 纯 Rust 库 EDK II 依赖组合 4 与 5这意味着你可以从最小的一个纯 Rust 驱动开始逐步扩展到混合 C/Rust 的完整模块。四、Rust 代码规范文档即质量Project Mu 对 Rust 源码有统一的文档约定docs/CodeDevelopment/rust_documentation_conventions.md核心原则很简单✅ 每个 crate、公开模块、类型和函数都必须有文档注释//!与///✅ 函数必须提供至少一个可运行示例并说明# Errors、# Safety、# Panics等公共章节✅ 文档行宽不超过 100 字符用cargo doc一键生成文档站。对新手来说这套约定相当于照着模板写就不会错。五、发布与安全Rust 代码如何进入正式版本Project Mu 采用fork 自 edk2 stable 分支 活跃开发的双轨模式上游 stable tag 先做 Mu 集成与 CI 构建在参考平台上完成启动测试后分叉出 release 分支安全修复则以SECURITY PATCH标记 cherry-pick 回发布线保证 Rust 新代码与老 C 代码接受同样的质量门禁。 详见docs/WhatAndWhy/security.md安全补丁机制。六、新手学习路径与获取代码 建议路线读docs/WhatAndWhy/rust.md为什么→ 通读docs/CodeDevelopment/rust_build.md怎么构建→ 在 Mu DevOps 容器里跑通cargo make build→ 按rust_documentation_conventions.md写第一个 Rust 驱动文档。获取文档仓库含全部上述资料git clone https://gitcode.com/gh_mirrors/mu12/mu关键资料速查为什么引入 Rustdocs/WhatAndWhy/rust.mdRust 构建系统实战docs/CodeDevelopment/rust_build.md文档编写规范docs/CodeDevelopment/rust_documentation_conventions.md构建前置条件含 Rust 工具安装docs/CodeDevelopment/prerequisites.md依赖分层架构docs/WhatAndWhy/layout.md特性总览Rust 支持等docs/WhatAndWhy/features.md 微软引入 Rust 不是换语言尝鲜而是为 UEFI 固件补上缺失了二十年的内存安全底线。Project Mu 用构建系统、分层架构和 CI 门禁把 Rust 真正焊进了固件生产线——这或许就是Rust 走进最底层最扎实的一个样板。【免费下载链接】muProject Mu Documentation项目地址: https://gitcode.com/gh_mirrors/mu12/mu创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表