Linux 上 Rust 驱动程序支持的第七版补丁已经发布

几天前, 米格尔·奥赫达,负责这些提案的开发和提交,Rust-for-Linu 项目的作者x 公布第七个组成部分提案 用于设备驱动程序开发 供 Linux 内核开发人员考虑。

这是补丁的第七版 甚至对 Rust 的支持也被认为是实验性的,但它已经包含在 linux-next 分支中,并且已经足够成熟,可以开始在内核子系统上创建抽象层,以及编写控制器和模块。 该开发项目由 Google 和 ISRG(互联网安全研究组)资助,ISRG 是 Let's Encrypt 项目的创始人,旨在促进 HTTPS 和技术开发以提高互联网安全性。

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

第七项提案的主要创新点

这项新提案强调了 工具包和 alloc 库的变体,这消除了错误时可能产生的“恐慌”状态, 更新到 Rust 1.60 版本 从而稳定了对内核补丁中使用的“may_uninit_extra”模式的支持。

除此之外,值得注意的是 增加了从文档运行测试的能力 (测试同时用作文档中的示例),通过将绑定到内核 API 的编译时测试转换为在内核启动时运行的 KUnit 测试。 要求测试不产生 Clippy linter 警告,核心 Rust 代码也是如此。

而且 提出了具有网络功能的 «net» 模块的初始实现. Rust 代码提供对内核网络结构的访问,例如“Namespace”(基于“struct net”内核结构)、SkBuff(struct sk_buff)、TcpListener、TcpStream(struct socket)、Ipv4Addr(struct in_addr)、SocketAddrV4(struct sockaddr_in)及其 IPv6 等价物。

后端 rustc_codegen_gcc, 已经实现了启动 rustc 编译器的能力. 编译器调试是指 rustc 使用基于 GCC 的代码生成器来构建 rustc 编译器的能力。

此外,最近发布的 GCC 12.1 包括对 libgccjit 的修复,这是 rustc_codegen_gcc 正常工作所必需的。 正在准备提供使用 rustup 实用程序安装 rustc_codegen_gcc 的能力。

其他突出的变化 这个新版本:

  • 为异步编程方法(async)实现的初始支持,以 kasync 模块的形式实现。
  • 添加了 net::filter 模块来操作网络数据包过滤器。 在 Rust 语言中添加了带有过滤器实现的示例 rust_netfilter.rs。
  • 添加了不需要固定的简单互斥锁 smutex::Mutex 的实现。
  • 添加了一个从不等待释放的 NoWaitLock 锁,如果它被另一个线程占用,它会尝试获取锁失败而不是停止调用者。
  • 添加了一个 RawSpinLock 锁,由内核中的 raw_spinlock_t 标识,适用于不能空闲的部分。
  • 为应用了引用计数机制的对象引用添加了 ARef 类型(总是被驳斥)。
  • 随着基于 GCC 的 Rust 语言编译器的实现,GCC 的 gccrs 前端的开发取得了进展。 目前有两名全职开发人员从事 gccrs 工作。

最后 如果您有兴趣了解更多信息, 您可以在中查看详细信息 以下链接。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责资料:AB Internet Networks 2008 SL
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。