最近 米格尔·奥赫达, Rust-for-Linux 项目的作者 发布第五个提案 Linux 内核开发人员开发组件的首选 Rust 设备驱动程序 供他们考虑。
对于已经发布了几个月的这一系列提案仍然不了解的人,您应该知道其背后的想法是由于目前对 Rust 的支持被认为是实验性的,但是 已经包含在 linux-next 分支中,并且已经足够成熟,可以开始创建抽象层了 关于内核子系统,以及编写驱动程序和模块。
目前, Miguel Ojeda 的开发委员会由 Google 和 ISRG 提供资金 (互联网安全研究组),它是 Let's Encrypt 项目的创始人,推动 HTTPS 和技术发展以提高互联网安全性。
值得一提的是,拟议的更改 它们使使用 Rust 作为开发驱动程序和内核模块的第二语言成为可能。 Rust 支持作为默认情况下未启用的选项提供,并且不会导致 Rust 包含在内核所需的构建依赖项中。
使用 Rust 开发驱动程序将使您能够以最小的努力创建更好、更安全的驱动程序,而不会出现诸如释放内存区域后访问、取消引用空指针和缓冲区溢出等问题。
Rust 在编译时通过检查引用、跟踪对象所有权和对象生存期(范围)以及在代码执行期间评估内存访问的正确性来提供内存安全。 Rust 还提供整数溢出保护,需要在使用前初始化变量,更好地处理标准库中的错误,默认强制执行不可变变量和引用的概念,并提供强静态类型以最大限度地减少逻辑错误。.
第五项提案的主要创新点
在新版本的补丁中, 继续删除评论 在讨论第一、二、三、四版补丁时制作的。
在已经进行的部分更改和改进中,我们可以发现 组件验证 为了兼容性 with Rust 已添加到持续集成系统中 基于 Intel 兼容的 0DAY/LKP bot 和测试报告已经开始发布。
除此之外,要强调的是 正在准备集成 Rust 支持 自动化测试系统 内核CI, 加上基于 GitHub CI 的测试被切换到使用容器。
还强调了 添加了定义附加参数的能力 注册设备时,以及 is_rust_module.sh 脚本已重新设计 并且添加了对基于“CONFIG_CONSTRUCTORS”实现的静态同步原语(全局共享变量)的支持。
, 其他突出的变化 在这个新的控制器提案中:
- Rust Core 模块无需定义属性:“#![no_std]”和“#![feature(...)]”。
- 添加了对单个构建目标(.o、.s、.ll 和 .i)的支持。
- 代码指南现在定义了用于分隔注释(“//”)和记录代码(“///”)的规则。
- 简化锁管理:Guard 和 GuardMut 合并为一种参数化类型。
- 添加了“RwSemaphore”抽象,它充当 C rw_semaphore 结构的包装器。
- 为了使用 mmap,添加了一个新的 mm 模块和一个 VMA 抽象(绑定在 vm_area_struct 结构上)。
- PL061 GPIO 控制器已更改为使用“dev_*!”宏。
- 常规代码清理。
最后 如果您有兴趣了解更多有关它的信息 关于这个新提案,您可以查阅详情 在下面的链接中。