Linux 内核补丁第八版,支持 Rust 语言

Rust-for-Linux 项目的作者 Miguel Ojeda 提议发布用于用 Rust 语言开发设备驱动程序的 v8 组件,供 Linux 内核开发人员考虑。 这是补丁的修订版本,考虑到第一个版本,发布时没有版本号。 Rust 支持被认为是实验性的,但已经包含在 linux-next 分支中,声称将集成到 5.20/6.0 的秋季版本中,并且已经足够成熟,可以开始在内核子系统上创建抽象层以及编写驱动程序和模块。 该开发由 Google 和 ISRG(互联网安全研究小组)资助,ISRG 是 Let's Encrypt 项目的创始人,致力于推动 HTTPS 以及提高互联网安全性的技术开发。

在新版本中:

  • 该工具包和 alloc 库的变体在发生错误时不会产生“恐慌”状态,已针对 Rust 1.62 版本进行了更新。 与之前使用的版本相比,Rust 工具包稳定了对内核补丁中使用的 const_fn_trait_bound 功能的支持。
  • 绑定代码被分成一个单独的板条箱包“绑定”,如果仅对主包“内核”进行更改,则可以简化重建。
  • 宏“concat_idents!”的实现以过程宏的形式重写,该过程宏不依赖于 concat_idents 功能,并允许使用对局部变量的引用。
  • “static_assert!”宏已被重写,允许在任何上下文中使用“core::assert!()”而不是常量。
  • 宏“构建错误!” 适合在为模块设置“RUST_BUILD_ASSERT_{WARN,ALLOW}”模式时工作。
  • 添加了一个带有设置“kernel/configs/rust.config”的单独文件。
  • 宏替换中处理的“*.i”文件已重命名为“*.rsi”。
  • 已停止支持构建优化级别与 C 代码不同的 Rust 组件。
  • 添加了 fs 模块,该模块提供用于处理文件系统的绑定。 提供了一个用 Rust 编写的简单文件系统的示例。
  • 添加了用于处理系统队列的工作队列模块(提供对 work_struct 和 workqueue_struct 内核结构的绑定)。
  • kasync 模块的开发随着异步编程方法(async)的实现而继续。 添加了用 Rust 编写的核心级 TCP 服务器的示例。
  • 添加了使用 [Threaded]Handler 类型和 [Threaded]Registration` 类型在 Rust 语言中处理中断的功能。
  • 添加了过程宏“#[vtable]”,以便更轻松地使用函数指针表,例如 file_operations 结构。
  • 添加了双向链表“unsafe_list::List”的实现。
  • 添加了对 RCU(读-复制-更新)和 Guard 类型的初始支持,以检查读锁是否绑定到当前线程。
  • 添加了 Task::spawn() 函数来创建并自动启动内核线程。 还添加了 Task::wake_up() 方法。
  • 添加了一个延迟模块,允许您使用延迟(msleep() 的包装器)。

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

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

来源: opennet.ru

添加评论