支持 Rust 语言的 Linux 内核第五版补丁

Rust-for-Linux 项目的作者 Miguel Ojeda 提出了第五个版本的组件,用于使用 Rust 语言开发设备驱动程序,供 Linux 内核开发人员考虑。 Rust 支持被认为是实验性的,但已经包含在 linux-next 分支中,并且已经充分开发,可以开始在内核子系统上创建抽象层以及编写驱动程序和模块。 该开发由 Google 和 ISRG(互联网安全研究小组)资助,ISRG 是 Let's Encrypt 项目的创始人,致力于推动 HTTPS 以及提高互联网安全性的技术开发。

回想一下,提议的更改使得可以使用 Rust 作为开发驱动程序和内核模块的第二语言。 Rust 支持作为一个选项提供,默认情况下不启用,并且不会导致 Rust 被包含为内核所需的构建依赖项。 使用 Rust 进行驱动程序开发将允许您以最小的努力创建更安全、更好的驱动程序,并且不会出现释放后内存访问、空指针取消引用和缓冲区溢出等问题。

Rust 在编译时通过引用检查、跟踪对象所有权和对象生命周期(作用域)以及在代码执行期间评估内存访问的正确性来提供内存安全处理。 Rust 还提供防止整数溢出的保护,要求在使用前强制初始化变量值,更好地处理标准库中的错误,默认应用不可变引用和变量的概念,提供强静态类型以最小化逻辑错误。

新版本的补丁继续消除了第一版、第二版、第三版和第四版补丁讨论期间所做的评论。 在新版本中:

  • 基于Intel支持的0DAY/LKP机器人的持续集成系统中增加了对Rust支持的组件测试,并已开始发布测试报告。 我们正准备将 Rust 支持集成到 KernelCI 自动化测试系统中。 基于GitHub CI的测试已转移到容器的使用。
  • Rust 内核模块不再需要定义 crate 属性“#![no_std]”和“#![feature(…)]”。
  • 添加了对单个程序集目标(.o、.s、.ll 和 .i)的支持。
  • 代码指南定义了分隔注释(“//”)和记录代码(“///”)的规则。
  • is_rust_module.sh 脚本已被重新设计。
  • 添加了对基于“CONFIG_CONSTRUCTORS”实现的静态(全局共享变量)同步原语的支持。
  • 锁管理得到简化:Guard 和 GuardMut 组合在一起,成为一种参数化类型。
  • 注册设备时可以定义附加参数。
  • 添加了“RwSemaphore”抽象,它充当 rw_semaphore C 结构的包装器。
  • 为了使用 mmap,添加了新的 mm 模块和 VMA 抽象(vm_area_struct 结构的包装器)。
  • GPIO PL061 驱动程序已切换为使用“dev_*!”宏。
  • 对代码进行了总体清理。

来源: opennet.ru

添加评论