LWN:维护者峰会上讨论Rust in kernel!

The end of the 6.18 merge window Linux 6.18合并窗口结束,共接收11,974个非合并提交,较6.17版本有所增加。主要更新包括:Rust Binder驱动正式合并,为内核Rust支持奠定重要基础;文件系统优化如FUSE支持大文件直接拷贝、ext4新增32位保留ID;新增大量硬件支持,覆盖RISC-V、x86等多平台;安全方面默认禁用存在问题的TPM HMAC加密功能;虚拟化增强SEV-SNP内存保护;内核内部改进DMA映射API并新增10个kfunc。该版本预计11月底发布,将成为下一代LTS内核。 阅读详情

关注了就能看到更多这么棒的文章哦~

Using Rust for kernel development

By Jonathan Corbet
September 27, 2021
Maintainers summit
DeepL assisted translation
https://lwn.net/Articles/870555/

在 2021 年的 Linux Plumbers 大会上,Linux 的 Rust 开发者们进行了许多富有成效的讨论。在维护者峰会(the Maintainers Summit)上,Miguel Ojeda 继续谈论关于 Rust 的话题。要怎样才能让 Rust 补丁被合入 mainline?他得到的答案是很令人鼓舞的,尽管并不是完全的承诺。

Ojeda 首先问大家,社区是否希望 Rust 进入内核。他说,如果 Rust 进入内核,它就应该作为一等公民。在他的讨论中,他遇到了许多对该语言感兴趣的内核开发者,其中许多人愿意参与。在这个过程中,他已经得到了这些开发者中许多人的帮助。他说,一些团体,比如安卓团队,都很迫切地希望 kernel 拥有 Rust 支持。

Linus Torvalds 回答说,内核社区 "几乎肯定(almost certainly)" 会用该语言来进行试验,但 Rust 的开发者需要接受我们把它当作试验。在这之前,不需要说服内核社区里的每一个人,但确实需要先获得不少子系统维护者的支持,主要是那些在一开始就会受到直接影响的维护者。他说,来自 "fake Linus"(指的是 GPIO 维护者 Linus Walleij)和 Greg Kroah-Hartman 的支持就会是一个好的开始。并不是必须要获得大多数内核维护者的支持的。几个月前,当这些 patch 被发布出来时,Torvalds 曾看过这些 patch,其中没有什么东西会让他感到说 "完全无法接受"。不过从那以后,他就再也没有看到过任何后续的发布了。Torvalds 最后说,如果 Rust 支持不先被合入的话,它就永远不可能达到足够可以在内核中真正使用起来的程度。

Kroah-Hartman 说,Rust 的补丁看起来比以前好多了,但还没有完全准备好。Wedson Almeida Filho 在 7 月份发布的 Rust GPIO 驱动是 "非常棒的",他还说一些文件系统开发者对 Rust 很感兴趣。这可能是一个很好的开展工作的场所,因为内核中的虚拟文件系统 API 相对稳定。

Kees Cook 建议,WiFi 或蓝牙驱动可能是一个使用 Rust 的好地方。Kroah-Hartman 回答说,他很愿意抛弃目前所有的蓝牙驱动。他说,他知道有一款即将上市的手机将会配备 100 个 out-of-tree 的驱动程序,他建议那些对 Rust 感兴趣的开发者可以从这些驱动中挑选 10 个,看看是否能开展工作。

Dave Airlie 说,肯定会有一些维护者因为增加了一种新的语言而感到害怕。他们将不得不花时间通过编写一些有用的代码来学习这个语言。他们需要确保外界有一些人会帮助他们来处理他们的子系统中的 Rust 代码。Torvalds 说,Rust 并不难懂,尽管错误处理的模式跟 C 很不一样。任何有能力 review patch 的人应该都可以掌握 Rust 语言到足够 review 该语言代码的程度。

Ted Ts'o 建议,Rust 的开发者应该更有规律地来发布 patch,比如每隔一两个星期发布一次。当有东西出现在他们的收件箱里时,开发者会看一看,这就是引起他们注意的方法。

Airlie 说,现在在内核的边边角角的位置有了一些 Rust 代码例子,比如说驱动程序领域。那有没有把 Rust 放到内核的核心领域的代码,而在边角来使用 C 代码的例子?Ojeda 回答说,Rust 的开发者并不是要重写核心内核中的功能,相反,他们正在做一套抽象层,从而可以便于利用安全的 Rust 语言来编写驱动程序。他说,如果使用 Rust 编写核心部分、而用 C 语言来写驱动的话,就会失去使用 Rust 的很多优势了。一旦你使用了 Rust,你就会想保持使用 Rust。

Ts'o 提出了经常有人担忧的对于那些范围比较广的、跨子系统的改动。当涉及到 Rust 代码时,这些改动会有多困难?如果 GPIO 的维护者同意的话,那就没问题,因为这个子系统基本没有什么其他依赖和影响。但是,如果文件系统开发者不得不修改一处代码从而破坏了 Rust 的 GPIO 接口,那会出现什么情况?Ojeda 重申,内核维护者需要接受这种变化,并且他们需要准备好 review 那些对他们的子系统的改动。来自其他子系统的开发者如果想在使用 Rust 的子系统中进行修改,就得先学习这种语言。Rust 开发者可以提供帮助,但这是不够的。如果内核维护者想要 Rust,他们就得要帮忙。Mark Brown 说,即使维护者有这个动力去进行 review,Rust 开发者的 review 也还是必要的,这样才能确保这个 patch 是 "符合 Rust 品位的"。毕竟,他一周前才开始学习这门语言,现在还不搞不清楚自己的写法对不对。

Arnd Bergmann 说,把 Rust 代码放到 kernel tree 的某些角落里,并不是正确的做法。在目前的 patch 中,有一个顶层的 Rust 目录,但是把 Rust 代码分放在相关的各个子系统中会好得多。应该把尽可能少的代码放在那个统一位置。Ojeda 回答说,还是需要有一些通用的支持代码,但很多东西可以从目前的内核 Rust 目录中分离出来,放到相关的子系统里面去。

Al Viro 询问 Rust 工具链是否足够稳定,他指出,目前要求使用最新的 Rust 编译器,这是一个问题。通常每个月至少会有一次他需要对过去三四年历史的 git commit 中进行 bisect 二分法查找来确认引入问题的那个 commit。如果在 bisect 中每个步骤都需要用不同的编译器,那么用起来就很麻烦了。Ojeda 说,现在的内核工作还正在使用一些不稳定的 Rust 特性,这确实是一个问题,兼容性不够好。目前的 Rust patch 可以使用一个 Rust 版本来完成对每个 kernel release 的编译,但是他们不能保证以后更新过的编译器还能正常编译过。所以,是的,bisect 的时候确实可能需要改变编译器的版本。

然而,如果 Rust 支持进入 mainline kernel,那么情况就会改变。这将给 Rust 开发社区带来压力,使其稳定 Rust 语言中所需要的那些功能,尽管没有人能保证这一定会发生。不过迟早会建立起一个只使用稳定的 Rust 特性的内核,到那时兼容性问题就会消失。他说,如果社区选择在这之前不合并对 Rust 支持,那他也能理解。

Ts'o 说,如果 Rust 社区想要从加入 Linux kernel 中引出的这些公共关系中尝到甜头,那么 Rust 社区可能也会被感动,从而来对这些必需的功能保持足够稳定。Ojeda 说,他被邀请参加今年的 Rustconf,这是一个好兆头,但随后他提交的关于 Rust 在内核中使用情况的材料被拒绝了,这就不是一个好兆头了。不过,后来在那次会议上还是强调了 Rust 加入 Linux kernel 的一些需要考虑的问题,所以在某种程度上来说,Rust 社区肯定是有兴趣的。

Thomas Gleixner 说,他并不反对这个实验,而且他喜欢这个语言中的一些概念。但他担心的是 "Rust 中未支持的 memory-model 应该怎么处理"。Ojeda 说,Rust 社区正在从 C++11 和 C11 标准中了解内存模型(memory-model)相关的信息,但还没有最终确定。Ojeda 说,在本周早些时候的一次谈话中,他鼓励 Paul McKenney,认为现在是去 Rust 社区并告诉他们后续事情会如何发展的最好时机,这是一个修复 C 语言 memory model 问题并采用正确方式实现的好机会。

Torvalds 在会议结束时重申,将 Rust 引入内核算是一个实验,社区只是把它的脚趾头放入水中而已。它会需要好几年的时间来把事情弄清楚,并确定它在内核中是否真的有帮助。他对 Rust 持积极态度,喜欢这种语言,也希望有一种更安全的语言,特别是用于那些驱动开发场景。但是,他在最后告诫说,他并不期望用 Rust 语言来重写整个内核。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

70994b39f5c7d695fa285f1ddb83845c.png

如何使用 rust 写内核模块 近年来,Rust 语言以内存安全、高可靠性、零抽象等能力获得大量开发者关注,而这些特性恰好是内核编程中所需要的,所以我们看下如何用rust来写Linux内核模块。 阅读详情

相关推荐

rust-kernel:一个小的多任务卵石启发了用Rust编写的内核

x86 Rust内核 这是用Rust编写的x86多线程内核的实现。 内核当前支持内核级线程,虚拟文件​​系统(受Linux启发)和原始驱动程序框架(受Windows启发)。 去做: IDE驱动程序。 ELF解析器。 用户空间加载器。 系统调用。 进程生命周期(fork / exec / wait /消失)。 调度(收益/调度/ make_runnable /睡眠)。 内存管理(mmap / munmap)。 IPC(???)。 安全性得到改善(去除包装纸等)。 动态加载,内核模块。 建造 内核必须由使用夜间配置构建的1.1.0之后的Rust编译器构建,以支持不稳定的功能和drop_in_place函数。 该构建链接到lib目录中预编译的libcore版本。 如果编译器的版本与用于编译libcore的版本不同,则可能会出现恐慌。 如果发生这种情况,请重新编译libc

LWN:内核中Rust支持的下一步动作!

关注了就能看到更多这么棒的文章哦~Next steps for Rust in the kernelBy Jonathan CorbetSeptember 19, 2022Maintainers SummitDeepL assisted translationhttps://lwn.net/Articles/908347/Rust for Linux 这个项目是希望今后可以使用 Rust 编程语言...

Linux News搬运工 352

BLEZ - Linux 上用于 Rust 的异步低功耗蓝牙

BLEZ - Linux 上用于 Rust 的异步低功耗蓝牙该库为Rust的官方 Linux 蓝牙协议栈 (BlueZ)的蓝牙低功耗 (BLE) API 提供了一个异步的、功能齐全的接口。支持使用惯用的Rust 代码发布本地和使用远程GATT 服务。异步支持取决于Tokio 。这个项目开始是一个模糊的分支,但从那时起就完全重写了。文档大部分是从BlueZ API 规范中复制的,但也在有意义的地方进行了改编。提供以下功能:蓝牙适配器枚举功率、可发现性、名称等的配置。通过更改事件流支持热插拔蓝牙设备发现查询地址、姓名、类别、信号强度(RSSI)等。低功耗蓝牙广告更改事件流连接和配对使用远程 GATT 服务GATT 服务发现对特征的读取、写入和通知操作对特征描述符的读写操作可选使用低开销AsyncRead和AsyncWrite流进行通知和写入操作发布本地 GATT 服务对特征的读取、写入和通知操作对特征描述符的读写操作支持两种编程模型基于回调的接口低开销AsyncRead和AsyncWrite流发送蓝牙低功耗广告除设备发现外,不支持经典蓝牙。要求该库已经过 BlueZ 5.56 版的测试。旧

Rust in Linux Kernel:第一手贡献者经验分享,避开90%新人踩过的坑

掌握Rust语言在Linux内核贡献中的实际应用,避开新手常见陷阱。分享真实开发经验,涵盖模块编写、内存安全优化与编译集成核心方法,提升代码合入效率。适用于驱动开发与内核新功能实现,值得收藏。

VarIsle的博客 834

linux-kernel-module-rust:在安全的Rust中编写Linux内核模块的框架

安全Rust中Linux内核模块 对于大多数目的,如果您有兴趣在Rust中编写Linux内核模块,则应查看 ,这是将该过程贡献给上游内核的一种努力。 这是一个用于在Rust中使用围绕内核接口和原语的安全抽象来编写可加载Linux内核模块的框架。 有关此项目的动机和目标的更多信息,请查看以及。 我们立即将重点放在使该项目适用于树外模块的可行性上,但是我们也将该项目视为是否可以用Rust编写树内组件的测试平台。 hello-world目录中有一个简单的演示模块,而tests /目录中有各种其他示例。 设计 我们在内核头文件上运行以生成自动Rust FFI绑定。 bindgen由提供支持,因此我们使用内核自己的构建系统来确定适当的CFLAGS。 然后,我们为这些类型编写安全绑定(请参阅src/的各种文件)。 Rust中的每个内核模块都staticlib在staticlib板条箱中,该板条

MaixCAM2 4K AI相机硬件解析与开发实战

嵌入式AI视觉开发中,边缘计算设备的选择直接影响项目落地效果。以NPU为核心的AI加速技术通过专用指令集优化,可在低功耗下实现10+TOPS算力,典型应用包括工业质检、智能门禁等实时场景。MaixCAM2作为新一代4K AI相机,搭载AX630 SoC芯片,其双核Cortex-A53与NPU的异构架构,在运行YOLOv11n模型时可达113FPS,显著优于传统方案。开发时需注意模型量化部署技巧,如INT8量化需500+张校准图片覆盖多光照条件,避免准确率下降。设备扩展性方面,PMOD接口支持热成像、ToF传

weixin_30819085的博客 690

LWN:如何在kernel里写Rust代码——第二部分!

在用户空间的 Rust 项目中,程序通常也会从 std(Rust 的标准库)中导入一些内容,但在内核中这不可行,因为内核需要对内存分配和其他标准库抽象掉的细节有更精确的控制。的形式书写,它适用于其所出现的定义内部。约定俗成是,对于返回值的宏使用圆括号,而对于调用以定义结构体的宏使用花括号(此处即是这种情况),但这并非强制要求。在驱动程序的 C 版本中,下一步是定义一些常量,它们代表了该驱动程序支持的三种不同但相关的设备:AX88772A、AX88772C 和 AX88796B。每个板卡对应的类型(例如。

Linux News搬运工 1725

实战解析:从Innovus到Calibre的LVS错误排查全流程

本文详细解析了从Innovus到Calibre的LVS错误排查全流程,涵盖物理验证关键步骤与工具链协同。通过实战案例分享,重点解决器件不匹配、连接性错误等常见问题,并提供GDS导出规范、网表修正策略等实用技巧,帮助工程师高效完成芯片设计物理验证。

9o8p7i6u5y的博客 1034

LWN:如何在 kernel 里写 Rust 代码:第一部分!

尽管 GCC 上对 Rust 的支持正在迎头赶上,并且 `rustc_codegen_gcc` 代码生成后端现在能够编译内核的 Rust 组件,但 Rust for Linux 项目目前仅支持使用纯粹的 `rustc` 进行构建。Rust 开发者可能还应该安装 Clippy(Rust 的代码 Lint 工具),rustdoc(Rust 的文档构建工具)和 rust-analyzer(Rust 的 语言服务器),但这些并非严格必需。构建和测试 Rust 代码是审查 Rust 代码的必要条件,但并非充分条件。

Linux News搬运工 1649

保姆级教程:用高云GW2A开发板搭建RISC-V软核处理器(含DDR3内存优化配置)

本文提供了一份详细的保姆级教程,指导开发者使用高云GW2A-LV18PG256C8 FPGA开发板搭建RISC-V软核处理器系统。教程涵盖了从开发环境搭建、PicoRV32软核集成,到关键的DDR3内存控制器配置与优化,并深入讲解了时序约束与系统调试方法,帮助初学者和爱好者实现从逻辑设计到软硬件协同的深度实践。

2a4s6d8f0g的博客 565

计算机视觉-深度学习图像检测方法梳理

计算机视觉-深度学习图像检测方法梳理 由于之后要转方向啦,趁这段时间整理手中硕士研究方向的一些阅读笔记,这是一篇关于计算机视觉的基础知识梳理 先搞清一些小知识点 首先我们要弄清楚图像分类、目标定位、语义分割、实例分割的区别 a. 图像分类 :给定一张输入图像,图像分类任务旨在判断该图像所属类别; b. 目标定位 :在图像分类的基础上,我们还想知道图像中的目标具体在图像的什么位置,通常是以包围盒的(bounding box)形式; c. 语义分割 :语义分割是目标检测更进阶的任务,目标检测只需要框出每个目

qq_41662991的博客 9953

LWN:使用Rust进行Linux kernel开发!

Supporting Linux kernel development in RustAugust 31, 2020This article was contributed by Nel...

Linux News搬运工 1085

NC65实现Restful接口开发及调试

NC65实现Restful接口开发及调试

linzhongshu的专栏 2144

LWN: Linux kernel 中的Rust!

关注了就能看到更多这么棒的文章哦~The Rust for Linux projectBy Jonathan CorbetSeptember 16, 2021KangrejosDeepL ...

Linux News搬运工 838

基于Claude AI的Dex个人操作系统:从零部署到高效工作流实战

在当今信息过载的时代,个人知识管理(PKM)和任务自动化成为提升效率的关键技术。传统PKM工具如Notion、Obsidian虽然提供了强大的信息存储能力,但本质上是被动的数据库,需要用户手动维护结构和链接,容易形成信息孤岛。其核心原理在于通过预设的文件夹结构和智能路由,实现信息的自动归类与关联。这种自动化同步机制的技术价值在于彻底消除重复劳动和决策疲劳,让用户从繁琐的信息整理中解放出来,专注于高价值思考。在实际应用场景中,它尤其适合需要处理大量会议、任务和人际关系的知识工作者,如产品经理、项目经理和团队领

weixin_42521558的博客 376

[STC32G144K246入门第一步]点亮LED

STC32G144K246是一款高性能32位8051单片机,集成了丰富外设资源,适用于工业控制和复杂算法处理。该芯片支持双模式内核,内置硬件加速器,提供246KB Flash和144KB SRAM存储空间。文章详细介绍了开发环境搭建步骤、寄存器配置方法,并给出了LED驱动示例代码,通过推挽输出控制P42口实现闪烁效果。虽然开发环境相比ARM存在不足,但通过合理配置仍可满足项目需求。该教程为开发者快速上手STC32G144K246提供了实用参考。

sinat_58149788的博客 795

LWN: kernel 快要有 Rust 了?

关注了就能看到更多这么棒的文章哦~Rust heads into the kernel?By Jake EdgeApril 21, 2021DeepL assisted translati...

Linux News搬运工 411

智能手环嵌入式系统:STM32+ESP8266多传感器健康监护设计

可穿戴健康监测设备是物联网与边缘计算融合的典型应用,其核心在于多源生理信号采集、低功耗实时处理及安全云协同。基于光电容积脉搏波(PPG)的心率与血氧检测、NTC热敏电阻体温测量、加速度-角速度融合跌倒判据等技术,构成了老年健康监护的基础感知能力;而STM32主控与ESP8266协处理器分工架构,则实现了计算资源与通信负载的高效解耦。该方案依托FreeRTOS多任务调度、阿里云IoT物模型标准化交互及MQTT双向通信,兼顾实时性、可靠性和工程可维护性,广泛适用于居家养老、慢病管理与远程健康预警等场景。

weixin_33256096的博客 97

LWN:内核处理Rust代码的流程!

Hindborg 同意,但他也指出,在块(block)子系统中,开发者进行更改时并不担心 Rust 方面的问题。当他收到问题报告时,他会在一天内修复它,一切都会很好。如果 Rust 代码要通过常规的子系统树(subsystem trees),那么维护者至少应该对这些代码进行构建测试(build tests),并且应该有一个明确的方案来应对构建出错(build break)的情况。在他的结论中,他重申,自 6.10 版本以来,Rust 编译器的最低版本一直保持在 1.78.0,即使较新的版本已经获得了支持。

Linux News搬运工 1659

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LWN: 内核 Rust 实验的现状

关于将核心内核(core-kernel)对 Rust 代码的依赖性,Airlie 表示,这在未来一两年内不应该发生。Kroah-Hartman 说,他曾担心核心内核和 Rust 驱动程序之间的交互,但发现交互比他预期的少得多。Ojeda 说他已经调查过,认为它应该可以工作,但他不知道目前的状况。Ojeda 总结说,用 Rust 工作的能力成功地吸引了新的开发者和新的维护者,这是该项目最初的目标之一。他说,更重要的消息是,运行 6.12 内核的 Android 16 系统正在搭载 Rust 编写的。

Linux News搬运工 200

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

LWN:6.3合并窗口的第二部分!

关注了就能看到更多这么棒的文章哦~The rest of the 6.3 merge windowBy Jonathan CorbetMarch 6, 2023DeepL assisted translationhttps://lwn.net/Articles/924384/Linus Torvalds 于 3 月 5 日发布了 6.3-rc1,按时关闭了 6.3 合并窗口。那时已经有 12717...

Linux News搬运工 897

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Linux内核引入Rust的5大关键原因(深度技术解析)

深入解析Linux内核引入Rust的5大动因,揭示Rust在内存安全、并发控制等方面对Linux内核贡献的技术突破。涵盖驱动开发、模块集成等应用场景,提升系统稳定性与安全性,值得收藏。

DeepNest的博客 1237

用Rust写操作系统(2)最小Rust内核

最小Rust内核 原文 https://os.phil-opp.com/minimal-rust-kernel/ 原作者 phil-opp 译者 readlnh 翻译项目地址 https://github.com/readlnh/Writing-an-OS-in-Rust-Second-Edition-zh_CN 在这篇文章里我们将在x86架构上创建一个最小的64位Rust内核。我们将在上一篇...

readlnh的博客 4233

Rust进入Linux内核的1024个关键瞬间,每一位开发者都该了解的历史进程

掌握Rust Linux内核开发的演进之路,解析1024贡献案例背后的技术突破与安全优势,涵盖内存安全、并发控制在操作系统中的实践方法。了解Rust如何赋能内核开发,提升系统稳定性与开发效率,值得收藏。

VarChat的博客 471

如何使用Go Cookbook构建分布式锁:Etcd实现方案详解

Go Cookbook是一个实用的Go语言代码示例集合,其中提供了基于Etcd的分布式锁实现方案。分布式锁是分布式系统中解决资源竞争的关键技术,能够确保多个节点在访问共享资源时的互斥性。本文将详细介绍如何利用Go Cookbook中的Etcd分布式锁实现,轻松解决分布式环境下的并发控制问题。 ## 核心功能与应用场景 分布式锁主要用于解决分布式系统中的并发问题,例如: - 确保任务调度的唯一性

gitblog_00468的博客 524

Windows Kernel in Rust 开源项目教程

Windows Kernel in Rust 开源项目教程 项目介绍 Windows Kernel in Rust 是一个开源项目,旨在使用 Rust 语言编写 Windows 内核模块。该项目由 Stephan van Schaik 发起,利用 Rust 的安全性和性能优势,为 Windows 内核开发提供了一种新的选择。通过这个项目,开发者可以学习如何在 Windows 内核环境中使用 Rus...

gitblog_00767的博客 908
上一篇: LWN:Julia 中的并发处理!
下一篇: LWN: Rust 中对于Linux kernel有用的关键特性!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值