第二版出版六个月后, 米格尔·奥赫达,Rust-for-Linux 项目的作者, 公布第三种方案的提议 用于在 Linux 内核中使用 Rust 语言开发设备驱动程序。
Rust 支持被认为是实验性的,但已经同意将其包含在 linux-next 分支中。 该开发由谷歌和 ISRG(互联网安全研究小组)组织资助,该组织是 Let's Encrypt 项目的创始人,为 HTTPS 的推广和提高互联网安全性的技术开发做出了贡献。
应该记住,提议的更改允许 Rust 用作开发内核驱动程序和模块的第二语言。
Rust 支持被宣传为默认不活动的选项 并且它不会导致 Rust 包含在所需的基本构建依赖项中。 使用 Rust 进行驱动程序开发将使您能够以最少的努力创建更好、更安全的驱动程序,而无需访问释放后的内存区域、取消引用空指针和超出缓冲区限制的麻烦。
补丁的新版本继续消除了在讨论补丁的第一和第二版本时所做的评论以及我们可以找到的最显着的变化:
过渡到 Rust 1.57 稳定版 作为参考编译器并绑定到 Rust 2021 语言的稳定版已得到保护。过渡到 Rust 2021 p 规范允许开始工作以避免使用这些不稳定的功能 在像 const_fn_transmute、const_panic、const_unreachable_unchecked 和 core_panic 和 try_reserve 这样的补丁中。
这也突出了 alloc 版本的开发仍在继续 来自 Rust 库,在新版本中, 实施了“no_rc”和“no_sync”选项以禁用该功能 它没有在内核的 Rust 代码中使用,使库更加模块化。 我们继续与主分配开发人员合作,为主库带来必要的内核更改。 库在内核级别运行所需的“no_fp_fmt_parse”选项已移至 Rust 的基础库(内核)。
清理代码以删除可能的编译器警告 在 CONFIG_WERROR 模式下编译内核时。 在 Rust 中创建代码时,会包含额外的诊断编译器模式和 Clippy linter 警告。
他们提出 使用序列锁的抽象 (序列锁)、电源管理的回调调用、内存 I/O(readX/writeX)、中断和线程处理程序、GPIO、设备访问、驱动程序和 Rust 代码中的凭据。
驱动程序开发工具已扩展 使用可重定位的互斥体、位迭代器、简化的指针绑定、改进的故障诊断和独立于数据总线的基础设施。
使用 Ref 类型改进了链接的工作 简化,基于 refcount_t 后端,它使用同名的中央 API 来计算引用。 标准映射库中提供的对 Arc 和 Rc 类型的支持已被删除,并且在内核级别执行的代码中不可用(对于库本身,已准备好选项来禁用这些类型)。
用 Rust 重写的 PL061 GPIO 驱动程序版本已添加到补丁中。 该驱动程序的一个特点是其近乎逐行的实现重复了现有的 C GPIO 驱动程序。 对于想要熟悉在 Rust 中构建控制器的开发人员,已经准备了逐行比较,这有助于理解在 Rust 中构建的 C 代码已经变成了什么。
Rust 的主要代码库采用 rustc_codegen_gcc,这是 GCC 的 rustc 后端,使用 libgccjit 库实现 AOT 编译。 通过后端的适当开发,它将允许您使用 GCC 收集内核中涉及的 Rust 代码。
除了 ARM、谷歌和微软,红帽还表示有兴趣在 Linux 内核中使用 Rust。
最后,如果您有兴趣了解更多,可以咨询详情 在下面的链接中。