1. Linux 7.0 版本概述
Linux内核创始人Linus Torvalds近日在LKML邮件列表上正式发布了Linux 7.0版本。这个版本延续了Linux内核一贯的稳定发布节奏,虽然版本号从6.x系列跃升到7.0,但这主要是遵循Linux内核的版本号惯例——当次版本号达到19后,主版本号就会递增。因此,Linux 7.0实际上是Linux 6.20的延续,而非传统意义上的"重大"版本更新。
从技术角度来看,Linux 7.0的发布周期保持了"大量小修复"的特点。Torvalds在发布公告中提到,最后一个发布周包含了各种小规模修复:网络核心和驱动、架构修复、工具和自测,以及各种随机问题的修复。特别值得注意的是,Torvalds提到了AI工具的使用可能会持续发现一些边界案例,这可能成为未来一段时间的"新常态"。
提示:虽然版本号跳到了7.0,但这个版本并不包含任何突破性的变化。对于生产环境用户来说,可以将其视为一个常规的稳定版更新。
2. Linux 7.0 主要新特性
2.1 AI编码辅助工具文档化
Linux 7.0首次正式引入了关于AI编码工具的文档说明。内核社区明确表示允许在Linux内核开发中使用AI工具,但强调人类提交者必须对AI生成的所有代码进行审查,确保其合规性,并承担最终责任。在提交说明中,AI工具的贡献必须使用"Assisted-by"标签标明,而传统的"Signed-off-by"标签仍然只能由人类开发者使用。
例如,一个典型的提交说明可能如下:
Assisted-by: Claude:claude-3-opus coccinelle sparse这一变化反映了开源社区对新兴AI技术的务实态度——既不排斥技术进步带来的效率提升,又坚持开源开发的基本准则和责任归属。
2.2 Rust支持结束实验阶段
在之前的版本中,Rust语言支持被标记为实验性功能。Linux 7.0中,Rust支持正式脱离实验状态,成为内核的稳定组成部分。不过,各个子系统的维护者仍然可以自行决定是否在其负责的子系统中使用Rust。
这一变化意味着:
- Rust在内核中的基础设施已经足够稳定 2.开发者可以更有信心地使用Rust编写内核模块 3.未来可能会有更多核心功能逐步迁移到Rust实现
2.3 文件I/O错误报告通用API
此前,Linux中每个文件系统都需要自行实现元数据损坏和I/O错误报告机制。Linux 7.0引入了通用的fserror基础设施,为文件系统提供了标准化的错误报告队列机制,通过fsnotify将错误传递给用户空间。
这项改进的主要优势包括:
- 统一了不同文件系统的错误报告方式
- 减少了重复代码
- 为用户空间工具提供了更一致的错误处理接口
2.4 交换性能优化(第二阶段)
Linux 6.18首次引入了交换表(swap table)基础设施作为交换缓存后端,带来了5%-20%的性能提升。Linux 7.0继续推进这项工作的第二阶段,进一步清理和加速交换代码。主要优化包括:
- 减少锁争用
- 优化内存访问模式
- 改进预读策略
- 降低上下文切换开销
这些优化特别有利于内存密集型工作负载,如数据库和大数据处理应用。
2.5 zram压缩数据回写
zram是Linux内核的内存压缩技术,可以将不常用的内存页面压缩后仍保留在内存中,从而有效扩展可用内存量。在之前的版本中,当需要将zram中的页面写回物理设备时,内核必须先解压这些页面,导致不必要的CPU和能耗开销。
Linux 7.0实现了直接写入zram压缩数据的功能,避免了先解压再压缩的冗余操作。这项改进特别有利于移动设备和低功耗场景,可以:
- 减少CPU使用率
- 降低能耗
- 提高I/O吞吐量
- 延长电池续航时间
3. ARM架构相关更新
3.1 通用ARM改进
Linux 7.0为ARMv8.7及更高版本的CPU添加了对64字节原子加载/存储操作(FEAT_{LS64,LS64_V})的支持。这项特性对于高性能计算和数据密集型应用尤为重要,可以显著提升特定工作负载下的内存访问效率。
3.2 Allwinner平台更新
针对Allwinner平台的主要更新包括:
- A523芯片新增SPI控制器支持
- 清理旧版ARM设备树文件以修复DT绑定验证错误
- D1和A100 SoC新增LED控制器支持
- D1和T113 SoC新增内部温度传感器支持
这些改进使得Allwinner平台的支持更加完善,特别是对于嵌入式和小型设备开发者来说,提供了更丰富的硬件控制能力。
3.3 Rockchip平台更新
Rockchip平台的更新较为全面,涉及多个子系统:
Pinctrl驱动:
- 修复Rockchip驱动中延迟配置的引脚问题
MFD驱动:
- 新增RK801 PMIC支持,包括核心MFD和稳压器驱动
ASoC驱动:
- S/PDIF清理和端口特性增强
DRM驱动:
- RK3368 HDMI支持
- 移除atomic_check修复
- RK3506支持
- RK3576/RK3588改进HPD处理
- 将Rockchip的inno HDMI支持转换为适当的桥接
- 新增RK3506支持
VPU驱动:
- 为RK3576和RK3588添加H.264/H.265视频解码器
ARM64设备树更新:
- 修复RK3576 Nanopi R76s和RK3576 EVB1的SD卡支持
- 为RK3576 EVB1添加PCIe插槽叠加层,启用HDMI和模拟音频
- 在Luckfox Core3576和FriendlyElec NanoPi M5上启用HDMI音频
- 在FriendlyElec NanoPi M5上启用UFS控制器
- 为RK3576的pcie和gmac添加dma-coherent属性
新增设备支持:
- Radxa CM3J系统模块(RK3568J)及Raspberry Pi CM4 IO板支持
- 基于RK3588S SoC的Radxa Compute Module 5(CM5)及IO板
- Orange Pi CM5模块及基板
- 基于RK3568的Anbernic RG-DS游戏机
- 基于RK3566的QNAP TS-133 NAS
3.4 Amlogic平台更新
Amlogic平台的更新同样覆盖广泛:
SPI驱动:
- spifc-a4: 在探测失败和remove()回调中注销ECC引擎
- amlogic-spisg: 修复aml_spisg_probe()中的内存泄漏
- spifc-a4: 移除冗余时钟清理
- 修复DMA映射错误处理
Pinctrl驱动:
- 将伪通用引脚控制功能从核心移出,放入Amlogic AM4驱动
时钟驱动:
- 添加Amlogic T7时钟控制器支持(外设、SCMI、PLL)
- 在Amlogic S4(S805X2/S905Y4)上添加视频时钟
- 修复Amlogic gx/g12 SoC上的HDMI PLL后分频器
Amlogic驱动:
- 为S905Y4添加新SoC ID
ARM设备树:
- 用generic-adc-thermal替换iio-hwmon
ARM64设备树:
- 清理工作:使用小写十六进制、在节点名称中使用连字符
- 将CPU OPP表和时钟分配移动到SoC.dtsi
- 移除无用的assigned-clock-parents
- 修复多个系列的MMC时钟
- 在Radxa Zero 2上添加Type-C控制器并启用NPU
新增设备:
- 基于Amlogic S905Y4的Khadas VIM1s SBC
3.5 三星平台更新
三星平台的更新主要集中在Exynos系列芯片:
Pinctrl驱动:
- 添加Exynos 9610(ARM64)引脚控制支持
PHY驱动:
- 更新ExynosAuto v920 USB3、组合hsphy和ssphy支持
时钟驱动:
- 新增时钟控制器:
- ExynosAuto v920 SoC的MFD
- Google GS101 SoC的显示处理单元(DPU)
- 为Google GS101 SoC时钟控制器实现自动时钟门控模式(HWACG)
SoC驱动:
- Exynos ChipID Socinfo驱动多项改进
- 最终添加Google GS101 SoC支持
- 从旧代码中进行一些清理
- 记录Axis Artpec-9 SoC PMU(电源管理单元)
三星ARM64设备树更新:
- ExynosAuto v920 - 添加MFD时钟控制器节点
- Google GS101:
- 添加真随机数生成器(TRNG)和OTP nvmem节点
- 通过移除对syscon的回退来纠正PMU兼容性
- 在时钟控制器中添加系统寄存器SYSREG块的phandle
- 添加DPU时钟管理单元节点
3.6 高通平台更新
高通平台的更新规模庞大,涉及多个新一代SoC:
新增SoC支持:
- 高通Milos - Snapdragon 7s Gen 3(SM7635)手机SoC
- 高通Kaanapali - 基于八个高性能Oryon CPU核心的SoC
Pinctrl驱动:
- 高通Mahua TLMM(ARM64)引脚控制支持
音频驱动:
- USB: 更新高通USB音频Kconfig依赖和许可证
Soundwire驱动:
- 支持高通v2.2.0控制器
DMA引擎:
- 添加高通Kaanapali和Glymur GPI DMA引擎支持
PHY驱动:
- 添加高通Glymur PCIe Gen4 2通道PCIe phy、DP和edp phy、USB UNI PHY和SMB2370 eUSB2中继器支持
- SC8280xp获得QMP UFS PHY
- Kaanapali获得PCIe phy和QMP PHY
- 添加QCS615 QMP USB3+DP PHY支持
LED驱动:
- 确保高通LPG驱动通过检查regmap_bulk_write()的返回值来检测硬件写入失败
背光驱动:
- 扩展高通WLED驱动以支持PMI8994和PMI8950变体所需的特定过压保护(OVP)值
时钟驱动:
- 高通Kaanapali全局、tcsr、rpmh、显示、GPU、摄像头和视频时钟控制器
- 高通SM8750摄像头时钟控制器
- 高通MSM8940和SDM439全局时钟控制器
- 将时钟分频器从round_rate()转换为determine_rate()
- 修复多个平台上的SDCC RCG以使用shared_floor_ops
remoteproc驱动:
- 重构高通安全世界助手
- 在高通PAS remoteproc驱动中添加从安全世界读取资源表的支持
PCIe控制器驱动:
- 将SC8180x DT绑定合并到SM8150
- 将SDX55、SDM845、QCS404、IPQ5018、IPQ6018、IPQ8074 Gen3、IPQ8074、IPQ4019、IPQ9574、APQ8064、MSM8996、APQ8084移动到专用模式
- 添加DT绑定和驱动支持SA8255p端点由固件配置
- 为未来平台解析所有PCIe桥节点中的PERST#
WiFi驱动:
- ath11k - 支持信道频率响应测量
- ath12k - 重大驱动重构以支持多wiphy设备
ARM64设备树更新:
- 大量设备树更新,涵盖QCS6490、SA8775P/QCS9075、QCS8300、MSM8939、Agatti、SDM630、SDM845、SM7225、SM8650、SM8750、SM6150/QCS615等多个平台
ARM32设备树更新:
- 将MSM8974 remoteproc电源供应迁移到RPM提供的电源域
- 为LG Nexus 5提供更人性化的型号名称
- MSM8226切换到通用RPMPD_索引
- MSM8960 - 引入两个额外的GSBI和I2C控制器
ARM64 defconfig更新:
- 启用启动Kaanapali和Milos平台所需的驱动
- 启用各种基于高通的笔记本电脑上的EC驱动
新增设备支持:
- 基于QCS6490的Rubik Pi 3板
- Arduino UNO Q(QRB2210)
- X Elite-based Medion SPRCHRGD 14 S1和Surface Pro 11笔记本电脑
- 基于SDM845的Pixel 3和Pixel 3 XL智能手机
- Fairphone Gen 6的初步支持
3.7 联发科平台更新
联发科平台的更新同样内容丰富:
DMA引擎:
- 支持Dimensity 6300和9200控制器
PHY驱动:
- 支持MT8188 HDMI PHY
SoC驱动:
- MT8196 DVFS电源管理和邮箱支持
- MT8371 Genio 520 SoC的socinfo条目
- 支持动态电压和频率缩放资源控制器(DVFSRC)版本4
- MT8196中CMDQ邮箱的初步支持
- 修复MediaTek SVS驱动调试操作中的内存泄漏
温控驱动:
- 支持Mediatek LVTS温控驱动的多个温度到原始值转换函数
- 添加MT8196和MT6991支持
- 添加MT7987的Mediatek LVTS驱动支持
内存控制器:
- Mediatek SMI: 修复错误路径和设备解绑期间的旧struct device引用泄漏
DRM驱动:
- mtk_hdmi_v2: 移除不需要的分号
- 将DP训练移动到热插拔线程
- 在mtk_crtc.c中将传统DRM日志转换为drm_*助手
- mtk_dsi: 添加高速(HS)模式支持
- 为Mediatek Genio 510/700/1200-EVK和Radxa NIO-12L板添加HDMI支持
邮箱驱动:
- 为MT8196 VCP引入mtk-vcp-mailbox驱动和绑定
- 为MT8196扩展mtk-cmdq,支持GCE虚拟化、mminfra_offset和指令生成数据
蓝牙驱动:
- 添加MediaTek MT7920支持
ARM64设备树更新:
- MT7981b获得PCI-Express、USB、以太网和"GED" WiFi硬件卸载支持
- OpenWRT One板获得相同支持
- MT8188/8195/8390/8395获得DPI1接口和SoC HDMI Tx控制器的HDMI输出支持
- 修复多个MTK设备树的dtbs_check警告
- 为所有具有至少一个叠加层的设备添加应用了叠加层的dtbs
defconfig更新:
- 启用MediaTek HDMIv2驱动作为模块编译
新增设备支持:
- Ezurio Tungsten 510(MediaTek Genio 510 SoC)
- Ezurio Tungsten 700(MediaTek Genio 700 SoC)
3.8 其他ARM硬件平台和SoC更新
除了上述主要平台外,Linux 7.0还包含了许多其他ARM平台的更新:
ASpeed:
- Facebook/Meta Anacapa BMC(AST2600)
- ASRock Rack ALTRAD8 BMC(AST2500)
Intel:
- Intel Agilex 5 SoM的载板(Agilex5 Modular板)
Marvel:
- Armada 7020的载板(Marvell DB-98CX85x0)
Microchip:
- 32位Microchip LAN9668的PCB8385参考板
NXP:
- NXP i.MX8QP和i.MX952
- 多个基于NXP LS1028a、i.MX 8M Nano、i.MX 8M Plus、i.MX 91、i.MX 93和i.MX 95的板
- 基于NXP i.MX 8Q Plus的载板
Realtek:
- 基于Arm Cortex-A78核心的RTD1501s、RTD1861b和RTD1920s Kent系列SoC
移除的SoC:
- 由于没有相关板支持,移除了多个SoC,包括三星s3c6400、ST spear320s、多个Renesas SoC和TI am3703/am3715等
3.9 树莓派特定更新
树莓派平台在Linux 7.0中也获得了一些专门改进:
Broadcom BCM2712:
- 启用RNG
- 添加看门狗
稳压器驱动:
- 将树莓派7英寸Display 1 ATTINY-based稳压器标记为GPIO控制器
- 添加固定gpio-cells
媒体驱动:
- i2c: ov5647
- 添加V4L2_CID_LINK_FREQUENCY和V4L2_CID_HBLANK控制
- 整理PIXEL_RATE控制和模式寄存器
- 为完整、1080p和分档模式使用相同的PLL配置
- 分离出公共寄存器
4. RISC-V架构更新
Linux 7.0为RISC-V架构带来了多项重要改进:
4.1 用户空间控制流完整性支持
内核新增对RISC-V Zicfiss和Zicfilp扩展的支持,这些扩展用于在用户空间提供硬件辅助的控制流完整性跟踪。这项安全增强功能可以帮助检测和防止某些类型的攻击,如ROP(Return-Oriented Programming)攻击。
4.2 ptrace行为改进和向量寄存器
改进了ptrace在处理向量寄存器时的行为,并添加了一些自测。这些改进使得调试工具能够更准确地检查和修改向量寄存器状态,对于高性能计算和SIMD应用开发特别有用。
4.3 字符串处理优化
优化了strlen()的汇编实现,提高了字符串处理性能。虽然这是一个小改动,但在字符串密集型应用中可能会带来可观的性能提升。
4.4 EFI卷挂载支持
启用了ISO-8859-1代码页作为内置支持,与ARM64保持一致,主要用于EFI卷挂载。这使得RISC-V平台能够更好地支持UEFI启动环境。
4.5 代码清理和优化
进行了一些代码清理工作,包括:
- 将copy_user_page()定义为copy_page()而非memcpy()
- 使用max3()简化riscv_iommu_init_check()中的表达式
这些改动虽然不大,但有助于提高代码的可读性和一致性。
4.6 平台特定更新
Alibaba T-Head:
- 支持T-HEAD TH1520上的CPU频率调节,允许重新配置用于CPU集群的PLL速率
Allwinner:
- D1获得LED控制器和温度传感器支持
Microchip:
- Pinctrl: Microchip Polarfire MSSIO(RISC-V)引脚控制支持
- GPIO: PolarFire SoC上的GPIO控制器支持多种中断类型
- CAN Bus: 为MPFS添加CAN复位
- Clock: 调整PolarFire驱动Kconfig部分
SiFive:
- IRQ: 修复sifive-plic驱动中的冻结中断错误
Sophgo:
- PCIe控制器驱动: 在Sophgo 2044 PCIe根端口上禁用ASPM L0s和L1
- 设备树:
- CV18xx: 更新RX/TX FIFO大小以修复USB传输问题
- SG2042: 优化DTS文件格式
- SG2044: 添加"b" ISA扩展以修复dtbs_check警告
SpacemiT:
- 添加K3 8核(16核)RISC-V芯片支持
- Pinctrl: Spacemit K3(RISC-V)引脚控制支持
- Clock: K3时钟驱动,包括APBC、APBS、APMU、DCIU和MPMU等多个时钟域
StarFive:
- Cache: 修复starlink_cache_init()中的设备节点泄漏
- Watchdog: 修复探测错误路径中的PM引用泄漏
5. MIPS架构更新
与往常一样,MIPS架构的更新主要是清理和修复。Linux 7.0中一些值得注意的MIPS相关提交包括:
- 恢复"clk: microchip: core: allow driver to be compiled with COMPILE_TEST"
- 恢复"clk: microchip: fix typo in reference to a config option"
- 实现ARCH_HAS_CC_CAN_LINK
- 修复rb532上的MMIO UART资源注册
- 解决LLVM在使用gp作为全局寄存器变量时的bug
- 修复Loongson64环境中的串行时钟频率设置
- Loongson2ef使用pcibios_align_resource()来阻止io范围
- Loongson2ef在早期阶段注册PCI控制器
- 修复Loongson64设备树中LS7A GMAC的phy相关定义
- 移除未使用的pic32.h头文件
- 更新多个驱动以使用platform_data中的pic32.h
这些更改虽然看起来琐碎,但对于维护MIPS架构的稳定性和功能性至关重要,特别是对于仍在使用MIPS架构的嵌入式系统和网络设备。
6. 总结与升级建议
Linux 7.0作为一个常规更新版本,虽然没有引入革命性的新特性,但在多个方面进行了有价值的改进和优化。对于不同用户群体,升级建议如下:
嵌入式开发者:
- ARM/RISC-V/MIPS平台的众多更新值得关注
- 特别是新增的SoC和设备支持可能直接影响硬件选型
- 各种驱动改进和bug修复可以提高系统稳定性
服务器/数据中心用户:
- 交换性能优化可能带来内存密集型应用的性能提升
- 各种架构特定的优化值得评估
- 新加入的硬件支持可能影响采购决策
桌面/笔记本用户:
- 新硬件支持可能改善兼容性
- 电源管理和性能优化可能带来更好的用户体验
- 图形和多媒体相关更新值得关注
移动设备开发者:
- 众多移动SoC的更新直接相关
- 电源管理和性能优化特别重要
- zram改进可以提升内存效率
在实际升级前,建议:
- 详细阅读变更日志中与自身应用场景相关的部分
- 在测试环境中充分验证
- 关注特定硬件平台的内核配置变化
- 评估新特性对现有应用的影响
Linux内核的持续演进确保了它对各种硬件平台和应用场景的支持始终保持前沿,Linux 7.0再次证明了这一点。无论是为了获得新硬件支持、性能优化还是安全增强,升级到Linux 7.0对大多数用户来说都是一个值得考虑的选择。