2026年2月22日,全球开源社区迎来里程碑时刻。在 linux-kernel.vger.kernel.org 邮件列表中,Linus Torvalds 以一封轻松诙谐却分量十足的邮件,正式宣告 Linux 7.0-rc1 版本的诞生。这标志着历经两周的合并窗口圆满收官,内核开发正式进入 7.x 时代的候选版本迭代周期。



作为长期深耕 PCIe domain 开发的工程师,我们既为这一开源盛事喝彩,更能从这份发布公告与背后的代码提交中,读懂内核社区「稳健前行」的初心,以及 PCIe 子系统在 7.0 时代的深度革新。本文将全面拆解 Linus 发布背后的故事,详解 7.0-rc1 的核心变化,并聚焦 PCIe 领域的关键更新,为开发者提供第一手参考。
在发布邮件的开篇,Linus 就用一贯的幽默风格,化解了外界对「7.0 大版本」的过度解读。这份邮件不仅是一份发布通知,更是对内核版本管理哲学的生动诠释,其中几个关键点,值得每一位内核开发者细细品味。
不同于其他软件项目将主版本号升级与「颠覆性功能」「兼容性断裂」绑定,Linux 内核的版本号更迭,始终遵循着「务实主义」原则。
Linus 在邮件中直言:「我们启用新的主版本号,纯粹是因为我容易困惑,不擅长处理大数字。」他进一步解释,内核早已不再基于功能或「稳定/不稳定」来划分版本,这次的 7.0,只是一个普通的「坚实进步」标记,仅此而已。
从技术层面看,这次版本号的跨越,是内核迭代节奏的自然结果。Linus 透露了一个清晰的规律:以每年 5-6 个版本的发布速度,内核主版本号大约每 3.5 年就会跃升一次。上一次从 5.x 到 6.x 是 2022 年底,如今时隔近 4 年,7.0 的到来,恰是这一节奏的延续。
对于未来「版本号越来越大」的担忧,Linus 更是展现了从容的心态:「我没有明确的计划,但算一算时间,到时候应该会有更能干的人接手,他们不会害怕两位数的版本号。所以我并不担心。」这份随性与自信,正是 Linux 内核能够持续健康发展的核心特质之一。
对于内核开发者而言,合并窗口的「顺滑度」,直接关乎候选版本的稳定性。Linus 对本次 7.0-rc1 的合并过程给出了极高评价:「这是我经历过的相当顺利的合并窗口之一。」
他为「顺滑」定下了一个简单却严苛的标准:不需要在自己的任何一台机器上,通过二分法排查启动故障。Linus 坦言,这次之所以能达成这一目标,是因为提前发现并解决了一个潜在的启动失败问题——即便如此,这也依然符合他心中「顺滑」的定义。
这份「顺滑」,背后是全球数千名开发者的严谨协作。在两周的合并窗口中,Linus 及其核心团队处理了海量的代码提交,最终形成的 7.0-rc1,既保持了功能的丰富性,又兼顾了基础的稳定性。
即便合并过程顺利,Linus 依然没有放松对测试的要求。在邮件中,他半开玩笑地号召所有开发者:「现在,你们都应该放下手头的一切,跑到电脑前,测试构建并启动这个闪亮的新内核。」
紧接着,他又放缓语气:「开玩笑的,吃完东西慢慢来吧。」但玩笑背后,是对「社区测试」的高度重视。Linus 强调,「对我来说能用不代表对所有人都能用」,rc1 版本的核心价值,就是通过全球开发者的海量测试,暴露潜在的兼容性问题、逻辑漏洞,为后续 rc 版本的迭代和最终 7.0 正式版的发布铺平道路。
这份「严谨中带着幽默」的号召,正是 Linux 内核社区能够持续产出高质量代码的关键——每一个版本的稳定,都离不开全球开发者的共同验证。
面对海量的代码变更,Linus 给出了一个清晰的「高维度视图」:本次更新的核心结构,依然延续了内核的经典规律——三分之二是驱动程序更新,剩下的三分之一是架构升级、文件系统、工具链及核心内核代码的随机集合。
这一结构,既体现了 Linux 内核「硬件适配优先」的核心逻辑,也反映了其核心子系统持续优化的趋势。对于 PCIe 开发者而言,「三分之二驱动」的占比,意味着我们所关注的领域,正是本次更新的核心重点。
此外,Linus 还透露,7.0-rc1 包含的变更数量极多,无法逐一列举,仅在邮件中附上了合并日志,供开发者参考具体的代码来源。而更详细的功能解读,他则建议大家参考 Git 仓库,或是社区中专注于记录内核新特性的开发者内容——这份「懒政」,实则是对社区协作的充分信任。
除了 Linus 邮件中提到的核心框架,7.0-rc1 还承载着诸多影响深远的更新。作为将大概率成为 Ubuntu 26.04 LTS、Fedora 44 等主流发行版默认内核的版本,其功能优化与硬件适配,将直接影响数千万用户和开发者。
7.0-rc1 的核心使命之一,是「适配未来硬件」。本次更新全面增强了对新一代处理器的支持,包括英特尔 Nova Lake、Diamond Rapids 处理器,AMD Zen 6 架构,以及高通 Snapdragon X2 平台等。
在图形领域,新增了对 AMD 即将推出的显卡硬件的支持;在存储接口方面,引入了多线程 SPI 与 Octal DTR 技术,使 SPI NAND 设备的性能实现跃升;在硬件监控层面,扩大了对华硕主板传感器的支持范围,配合新增的「非阻塞时间戳」功能,系统状态监测的精度大幅提升。
值得一提的是,本次更新还正式支持了 Apple USB Type-C PHY 控制器,解决了苹果设备与 Linux 系统的兼容性痛点,进一步拓宽了 Linux 的硬件生态。
在核心性能优化方面,7.0-rc1 带来了多项突破:
在安全层面,7.0-rc1 进一步完善了 Landlock 安全模块与内核隔离机制,修复了多个高危内存溢出漏洞,强化了 UEFI 安全启动与全磁盘加密支持,为企业级场景筑牢了安全防线。
本次更新中,最具里程碑意义的变化之一,是 Linux 内核正式结束了 Rust 语言的实验阶段,确认其将作为长期支持的编程语言。
在 7.0-rc1 中,Rust 代码已经深入 VFS(虚拟文件系统)等核心子系统,为内核带来了更强的内存安全性和可靠性。这一变化,标志着 Linux 内核的开发语言生态,从单一的 C 语言,迈向了「C + Rust」的双核心时代,为未来内核的模块化、安全化开发奠定了基础。
此外,本次更新还标准化了通用 I/O 错误报告机制,使不同硬件平台的故障诊断流程趋于统一,大幅降低了开发者的调试成本。
作为 PCIe domain 开发者,我们最关注的,无疑是本次更新中 PCIe 子系统的变化。由 Bjorn Helgaas 主导的 [GIT,PULL] PCI changes for v7.0 合并请求,最终被顺利合入 torvalds/linux.git,成为 7.0-rc1 的核心组成部分。
这份包含 118 个文件修改、6650 行新增代码、2512 行删除代码的更新,涵盖了枚举、资源管理、驱动绑定、错误处理、电源管理、虚拟化、端点框架等全维度优化,其中多个更新,将直接改变 PCIe 开发者的工作方式。
枚举是 PCIe 设备工作的基础,7.0-rc1 对枚举逻辑进行了多处关键修正,解决了长期存在的「配置不规范」问题。
此前,内核会尝试为 SR-IOV 虚拟功能(VF)启用 Extended Tags 特性,但根据 PCIe 协议,该位在 VF 中是「保留位」,此举不仅无效,还会产生大量误导性的日志信息。
在 7.0-rc1 中,Håkon Bugge 提交的补丁修复了这一问题:内核不再尝试为 VF 启用 Extended Tags,从根源上消除了无效配置与日志噪音,让枚举过程更贴合协议标准。
读取完成边界(RCB)是 PCIe 协议中控制数据传输的关键参数。此前,端点的 RCB 配置会受 ACPI _HPX 方法的影响,导致与根端口的配置不一致,进而引发潜在的传输问题。
本次更新中,内核修改了 RCB 初始化逻辑:在 pci_configure_device() 函数中,直接根据根端口的 RCB 设置,初始化端点的 RCB,彻底摆脱了对 ACPI _HPX 的依赖,确保了整个链路的配置一致性。
_HPX 作用域:精准管控,避免配置冲突ACPI _HPX 方法用于传递 PCIe 设备的扩展配置信息,但此前其作用域过于宽泛,容易覆盖 Extended Tag、Relaxed Ordering 等关键设置。
7.0-rc1 对 _HPX 的作用域进行了严格限制:仅在「操作系统拥有热插拔权限,但不拥有 AER(高级错误报告)权限」的场景下,才将 _HPX 中的 PCIe 设置记录应用于 AER 配置。这一修改,避免了「越权配置」导致的参数冲突,让 ACPI 与内核的配置分工更清晰。
PCIe 设备的资源管理(如 IO 地址、内存地址分配),直接影响系统的稳定性与资源利用率。7.0-rc1 对资源管理模块进行了「重构级」优化,核心贡献者是 Ilpo Järvinen,其提交的 27 个补丁,彻底改变了桥接窗口与可选资源的管理逻辑。【BAR资源分配在两个merge window做了非常多的改动】
此前,CardBus 相关代码与核心 PCI 代码混杂在一起,即便用户未启用 CONFIG_CARDBUS 配置,这些代码也会被编译进内核。
本次更新将 CardBus 代码全部移至新文件 setup-cardbus.c,并通过 Kconfig 实现「按需编译」——仅当 CONFIG_CARDBUS 启用时,才会编译该部分代码。这一改动,不仅精简了内核体积,还让代码结构更清晰,降低了后续维护的成本。
桥接窗口的资源分配,是 PCIe 资源管理的难点。此前,内核在处理「可选资源」(如 SR-IOV VF BAR、扩展 ROM)时,会丢失额外的对齐要求,导致桥接窗口对齐错误;同时,内核会「过度估算」桥接窗口的大小,造成资源浪费。
7.0-rc1 修复了这两个核心问题:
pbus_mem_size_optional() 函数,专门处理可选资源的尺寸计算,确保对齐要求不丢失;/proc/iomem 扁平化问题对于嵌套桥接器和多端点的复杂 PCIe 拓扑,此前内核的 MAX_IORES_LEVEL (资源层级上限)仅为 5,导致 /proc/iomem 无法完整展示资源的嵌套关系,出现「扁平化」问题,给开发者调试带来极大不便。
本次更新将 MAX_IORES_LEVEL 从 5 提升至 8,足以覆盖绝大多数复杂的 PCIe 拓扑,让 /proc/iomem 能够精准展示每一层设备的资源分配情况,为 PCIe domain 开发者的调试工作提供了更清晰的视图。
此前,内核会尝试「声明」已禁用的桥接窗口资源,这会导致不必要的「声明失败」错误,甚至引发资源冲突。
7.0-rc1 中,内核新增逻辑:对已禁用的桥接窗口,不再进行资源声明,从根源上消除了这类虚假错误,让资源管理更严谨。
驱动绑定的可靠性与电源管理的效率,直接关系到 PCIe 设备的「即插即用」体验和功耗表现。7.0-rc1 对此进行了多处关键修复与优化。
Uwe Kleine-König 提交的 6 个补丁,聚焦于 PCIe 端口驱动(portdrv)的优化:
pcie_port_remove_service() 函数中的设备引用泄漏问题,避免内存溢出;pcie_port_bus_match() 与 pcie_port_bus_type 移至 PCIe 专属的 portdrv.c 文件,实现代码解耦;pcie_port_bus_type.probe() 和 .remove() 回调函数,为未来移除 struct device_driver 中的 .probe() 和 .remove() 接口铺平道路。Brian Norris 提交的补丁,解决了电源管理中的两个核心痛点:
Manivannan Sadhasivam 主导的电源控制框架升级,是本次 PCIe 子系统的一大亮点:
pwrseq、tc9563、slot 驱动新增统一的 power_on/off 回调函数,实现电源控制的标准化;此外,本次更新还删除了 Qualcomm 驱动中的 .assert_perst() 回调函数——因为该操作现在由控制器驱动统一处理,不再需要驱动层单独实现,进一步简化了驱动开发的流程。
错误处理的及时性与虚拟化场景的安全性,是企业级 PCIe 应用的核心需求。7.0-rc1 对此进行了针对性优化。
Lukas Wunner 提交的补丁,修复了 AER(高级错误报告)中的「陈旧错误」问题:在探测到报告代理时,内核会主动清除其中的陈旧错误,避免将历史错误识别为「近期错误」,提升了错误诊断的准确性。
Shuai Xue 则新增了两个关键的 RAS(可靠性、可用性、可维护性)追踪点:
这两个追踪点,让开发者能够更精准地监控 PCIe 设备的运行状态,为故障排查提供了更丰富的日志依据。
虚拟化场景下,ACS(访问控制服务)是保障设备隔离的关键。7.0-rc1 对 ACS 的启用逻辑进行了两处关键优化:
此外,Keith Busch 还修复了插槽重置时的锁机制问题,通过锁定桥接设备,避免了并发重置导致的竞态条件,提升了虚拟化场景下的稳定性。
端点框架(Endpoint Framework)的完善,以及各大厂商控制器驱动的更新,是 7.0-rc1 PCIe 子系统的「重头戏」,尤其对嵌入式 PCIe 开发、设备端开发意义重大。
Koichiro Den 提交的 9 个补丁,为端点框架带来了两项核心功能:
dynamic_inbound_mapping 特性位,支持端点控制器在不重置 BAR 的情况下,更新入站地址转换——基于 DWC 的端点控制器已实现该特性;subrange_mapping 特性位,支持在单个 BAR 中映射多个独立的入站区域,同时新增了对应的自测试用例,确保功能可靠性。此外,Aksh Garg 修复了多 PF(物理功能)配置下的可调整大小 BAR 支持问题——此前该功能仅支持 PF 0,本次更新实现了所有 PF 的全面支持,解决了多功能设备的一大痛点。
本次更新覆盖了几乎所有主流厂商的 PCIe 控制器驱动,其中多个更新值得重点关注:
Jacky Chou 提交的补丁,新增了对 ASPEED AST2600 PCIe Root Complex 的设备树绑定与驱动支持,填补了该硬件在内核中的空白,同时完善了 TLP 头的 FMT、TYPE、CPL 状态定义,为调试提供了更丰富的依据。
Krzysztof Kozlowski 与 Manivannan Sadhasivam 主导了 Qualcomm 驱动的重构:
Qiang Yu 则移除了 Qualcomm 根端口的「未实现功能」:删除了 DPC 扩展能力与 MSI-X 能力,让内核能够自动回退到 INTx 中断,避免了「功能声明与实际支持不匹配」的问题。
作为嵌入式领域应用最广泛的 PCIe 控制器核心,DWC 驱动在本次更新中迎来了大量优化:
此外,本次更新还回退了此前「基于链路中断触发枚举」的逻辑——因为 PCI 核心不会为「可能连接的层级」分配总线号,这一回退,避免了枚举失败的潜在问题。
irq_domain_free_irqs() 函数,允许 PCI/MSI 驱动以模块形式编译,同时放宽 Tegra194 驱动的 Kconfig 限制,适配更多平台;pci_generic_config_write() 函数,移除不必要的自定义封装,简化了代码;Hou Tao 提交的补丁,解决了 P2PDMA(PCIe 端到端 DMA)中的两个核心问题:
vm_insert_page() 失败时,释放每 CPU 的 pgmap 引用,避免设备移除时出现系统挂起;p2pmem_alloc_mmap() 中关于「页面引用计数」的错误警告,纠正了此前的逻辑判断。system_percpu_wq 和 WQ_PERCPU 显式请求每 CPU 工作队列,为未来移除 WQ_UNBOUND 做好准备;ltssm_status 新增 L1.1/L1.2 子状态上下文,让开发者能够更精准地监控链路状态;作为 PCIe domain 开发者,7.0-rc1 的更新,不仅是「代码的变更」,更是「开发模式与调试效率」的提升。结合本次更新的核心内容,我们可以总结出对日常开发的几大实际影响:
电源控制的标准化、Qualcomm 驱动中 PERST# 处理的统一、portdrv 架构的重构,都让 PCIe 驱动的开发流程更清晰。对于开发者而言,无需再为「电源管理」「中断处理」等基础功能编写重复代码,只需遵循内核提供的标准化接口,即可快速适配新硬件。
/proc/iomem 层级的提升,让复杂拓扑的资源分配一目了然;这些改进,将大幅降低 PCIe 设备故障排查的时间成本。
本次更新中的多处修改,均围绕「贴合 PCIe 协议标准」展开——从 VF 扩展标签的禁用,到 RCB 初始化的统一,再到 AER 陈旧错误的清除,都让内核的 PCIe 实现更严谨,减少了「因协议理解偏差」导致的兼容性问题。
Linux 7.0-rc1 的发布,不是「颠覆」,而是「沉淀」。正如 Linus 所言,这个版本号,只是内核「坚实进步」的标记。但对于 PCIe domain 开发者而言,这份「进步」,却有着史诗级的意义——它重构了资源管理逻辑,完善了端点框架,标准化了电源控制,优化了虚拟化安全,让 PCIe 子系统的健壮性、可扩展性、可维护性,提升到了新的高度。
接下来,内核社区将进入为期数周的 rc 版本迭代阶段,从 rc1 到 rc7,每一个版本都会修复大量的 bug,优化细节功能。作为开发者,我们的核心任务,就是积极参与测试,向社区反馈问题,提交补丁——这既是对开源社区的贡献,也是确保 7.0 正式版能够稳定落地的关键。
对于 PCIe 开发领域而言,7.0 时代的到来,是一个新的起点。随着内核对 PCIe 6.0、CXL 等新一代技术的持续适配,未来的 PCIe 开发,将更聚焦于「高性能」「低功耗」「高安全」「高扩展」四大方向。而 7.0-rc1 打下的坚实基础,将为这些技术的落地,铺平道路。
最后,借用 Linus 在发布邮件中的一句话:「测试吧,慢慢来吧。」让我们带着对开源的热爱,对技术的敬畏,共同参与到 Linux 7.0 的迭代中,见证一个更稳定、更强大、更适配未来的内核诞生。
#QEMU PCIe 体验 v7.0-rc1


---
欢迎关注我们的微信公众号,获取最新技术解析文章。

https://blog.csdn.net/qq_27846717/article/details/152646990?spm=1001.2014.3001.5501
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/log/?qt=author&q=Hans+Zhang