关于讨论在Linux内核中添加Rust开发工具问题的提案

尼克·德萨尼(尼克·德索尔尼尔斯),在 Google 工作,提供 支持 使用 Clang 编译器构建 Linux 内核 帮助 修复 Rust 编译器中的错误, предложил 举行会议 2020 年 Linux 管道工会议 会议讨论如何使用 Rust 开发内核组件。 Nick 正在组织一个专门针对 LLVM 的微型会议,他认为讨论 Rust 支持可能集成到内核中的技术方面会很好(他已经为 KBuild 准备了一个工作原型),并了解是否应该提供这种支持到底应该添加什么,以及应该接受哪些 Rust 使用限制。

让我们回想一下,在开源峰会和嵌入式 Linux 会议最近的一次讨论中,Linus Torvalds 不排除 Rust 等语言中用于开发非核心内核子系统(例如驱动程序)的绑定的出现。 使用 Rust 开发驱动程序的能力将使我们能够以最小的努力创建更安全、更好的驱动程序,并且不会出现释放后内存访问、空指针取消引用和缓冲区溢出等问题。 已经有几个第三方项目来实现此功能:

  • “桶中鱼”公司的开发人员 подготовили 一个用 Rust 语言为 Linux 内核编写可加载模块的工具包,在接口和内核结构上使用一组抽象层来提高安全性。 使用该实用程序根据现有内核头文件自动生成层 宾根。 Clang 用于构建层。 除了中间层之外,组装的模块还使用 staticlib 包。
  • 香港中文大学研究人员 发展 一个使用 Rust 开发嵌入式系统和物联网设备驱动程序的项目,该项目还使用 bindgen 基于内核头文件生成层。 该框架允许您在不更改内核的情况下提高驱动程序安全性 - 建议使用更安全的 Rust 语言在编译阶段阻止问题,而不是在内核中为驱动程序创建额外的隔离级别。 假设设备制造商可能需要这样的方法,即在没有进行适当审核的情况下匆忙开发专有驱动程序。
  • 框架开发人员 C2铁锈 用于将 C 代码广播到 Rust, 行为 通过最少的手动编辑来转换内核模块的实验。 注意到的问题之一是在内核的许多部分使用的代码使用了 C2Rust 尚不支持的 GCC 扩展。 为了解决这个问题,C2Rust计划添加对GCC属性inline、cold、alias、used和section的支持,并扩展内联汇编器的功能,解决同时对齐和打包的结构(例如xregs_state)的问题。 需要手动工作的重大问题包括无法将重要的 C 宏转换为 Rust 宏以及需要重新定义类型,因为 C2Rust 将 C 类型转换为 libc 包中的定义,但该包不能在内核模块中使用。

来源: opennet.ru

添加评论