LWN: 迫在眉睫的版本号修改!

展讯Android11 gms认证fail合集 GMS fail修改 1.修改两台机器之间无法mtp互联,导致cts-v测试fail问题 2.回退allow untrusted_app proc_net:file { read }修改,此修改影响cts testProcNetSane testTcpDefaultRwndSane测试fail 3.添加MAINLINE_PATCH_LEVEL_1 := true解决gts testMainlinePatchLevel测试 4.删除android.hardware.se.omapi.uicc.xml解 阅读详情

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

The imminent stable-version apocalypse

By Jonathan Corbet
February 5, 2021
DeepL assisted translation
https://lwn.net/Articles/845120/

人们经常说,stable-kernel release 应该要是稳定的(stable),也就是说,,stable kernel 比起 mainline 版本来说,更不容易出现 ABI 被破坏的情况,当然最好是绝对不要出现。不过对于未来的 stable kernel 来说,可能很难给出这个承诺,原因很简单:没有人预料到某些内核版本会有超过 255 个小更新版(minor update)。

在 Linux kernel 的历史上,很少有开发者会维护某个内核版本好几年,并且维护过程中发布的更新版本(maintenance release)也较少。也有一些例外,2.4 版本是 2001 年初发布的,Willy Tarreau 在 11 年多以后终于停止了对其进行的维护工作。即便如此,最终的版本也仅仅是 2.4.37,不过在后来补发的 11 个微小 "fixup" release 之后,人们也可以称之为 2.4.48。很少有哪个内核版本会得到长期维护,,而且间隔也会很长。

不过近年来,这种情况已经发生了变化,一些旧内核版本得到了更多的长期维护。因此,在 2 月 3 日的时候发布了 4.9.255 和 4.4.255 更新版。这两个 kernel 版本中此前合入了 18,765 个和 16,986 个 patch,而且目前合入速度仍然没有放缓。目前公布的计划是会维护 4.9 直到 2023 年 1 月,而 4.4 会维护到 2022 年 2 月。

正如 Jari Ruusu 所指出的,kernel-release 名字中的数字现在会导致一些麻烦。内核中定义了一些与版本号有关的宏,这些宏位于 include/generated/uapi/linux/version.h 。

#define LINUX_VERSION_CODE 330496
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

第一个宏 LINUX_VERSION_CODE,是在最顶层的(top-level) makefile 中计算出来的,它来自于:

(5 << 16) + (11 << 8) + 0

0x50b00 这个数字表明这是一个 5.11-rc 的内核,这和 KERNEL_VERSION(5,11,0)的结果一致。

很容易看出来,一旦 minor version(KERNEL_VERSION()宏中的 "c")超过 255,这两个宏都会失效。在 4.9.255 内核上这个宏会生成 0x409ff,但在 4.9.256 上,它反而会返回 0x40a00–看起来像 4.10.0。这样肯定会在用户社区中造成混乱。

这个问题对于稳定内核的维护者来说已经有所准备了,Sasha Levin 在 1 月中旬发布了一个 patch set 试图解决这个问题。其将 LINUX_VERSION_CODE 和 KERNEL_VERSION()中的 minor version 都改为 16 bit,从而避免溢出。这个补丁进入了 linux-next,但似乎不太可能被接受,正如 Jiri Slaby 所指出的,这些宏在 user space 有使用到,成为了内核 ABI 的一部分。他补充说,GNU C 库和 GCC 编译器(特别是 BPF 代码)中的逻辑都是跟目前内核版本中的代码相吻合的,如果我们光改动内核的话是不够的。内核中还有很多其他地方与用户空间交互时都会依赖这些版本号相关的代码,media ioctl()命令就是个例子。改变内核中 KERNEL_VERSION() 的工作方式的话,这会破坏那些使用旧的宏来编译的程序,这是不允许的。

那么该怎么做呢?在写这篇文章的时候,这个问题还没有解决,但有几个方案摆在桌面上。

  • Ruusu 指出了这个问题,建议稳定版可以开始递增 EXTRAVERSION 字段;这个字段通常包含 -rc7(用于 mainline 的 test release)或 Git 提交 ID 等字符串。minor version 保持在 255。这样可以避免破坏 ABI,但也会让用户空间的代码很难区分 255 之后的 stable release。这也可能会给那些使用该字段来标识自己的 build 版本的发行版提供商带来一些小麻烦。

  • stable kernel 维护者 Greg Kroah-Hartman 觉得他可以 "先不要管它,看看会发生什么"。但是,正如 Slaby 指出的那样,这将造成上述的溢出问题,会让 user space 感到混淆。他说,如果要让它移除的话,还是必须要将 minor version 保持在 8 位,这样就回到 0,这是否会造成混乱是另一个问题了。通常来说人们总是期望版本号是永远单调增加的。

不过最可能的结果可以还是从内核历史中学习。很久以前,mainline 内核版本有三个数字,而不是两个。以前版本号是 2.6.30 这样的。在那个时候,minor version 字段不能用于 stable 版本更新,所以使用了 EXTRAVERSION 字段代替。在 2.6.30.3 的 makefile 中,我们可以看到。

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 30
EXTRAVERSION = .3
NAME = Man-Eating Seals of Antiquity

这个解决方案此前多年一直可以正常工作,所以现在应该也还是有办法再用起来的。很可能是让 SUBLEVEL 一直停留在 255,而 EXTRAVERSION 则表示真正的 release number。

Leon Trotsky 曾经说过 "所有可能发生在一个人身上的事情中最令人意想不到的,就是 old age"。也许这里也有类似的力量在起作用。对内核开发者来说最意想不到的事情就是耗尽了 bit 位数。这个版本号溢出问题本来可以提前就预见到,并且可以预测到会发生的日期。但现在必须在下一个稳定内核发布之前找到某种解决方案。可喜的是,这个问题应该比 old age 问题要更容易解决。

更新:Kroah-Hartman 似乎选择了 "什么都不做" 的方案,发布了 4.9.256 和 4.4.256,这两个版本都对版本号加一,但没有做其他任何实际改动。"我会尽量暂缓一周,之后再做一个'真正的'4.9.y 版本,这样可以给大家一段时间进行测试并给我回复。4.9.y 版本中排队等着进的 patch 非常多,所以我不愿意等太长时间,这个作为给大家的提醒……"

更新 2:最后,似乎会采取固定版本号的解决方案,minor number 今后固定为 255。

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

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

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

Linux Swap 子系统:架构、内存管理与虚拟化 Swap Linux Swap机制通过将不活跃内存页移至磁盘或压缩内存,扩展系统有效内存容量,缓解内存压力。传统架构中,逻辑Swap槽与物理存储绑定,导致资源浪费,尤其在使用Zswap等压缩技术时。为此,Vswap与Xswap提出虚拟化方案:前者以XArray实现灵活映射,支持多后端迁移;后者采用稀疏映射,简化管理但容量固定。二者在架构设计、资源记账与动态扩展上各有权衡,反映了内核开发中对性能、可维护性与灵活性的深层考量。 阅读详情

相关推荐

易灵思Ti60F100 FPGA的HyperRAM实战:从硬件连接到Native接口时序调试

本文详细介绍了易灵思Ti60F100 FPGA内置HyperRAM控制器的实战应用。文章从硬件设计要点(如400MHz+信号完整性、等长匹配)切入,重点解析了如何通过Interface Designer配置高效的Native接口,并分享了其时序详解与调试技巧,为开发者提供了一份从硬件连接到软件调试的深度指南。

weixin_29168153的博客 456

Linux内核的代号---有趣

根据网络整理而来!!只是觉的有意思!!! 大多数 Linux 2.6 和3.x kernel 的名字位于其源码树的 Makefile 文件中, 你可以从 Git 库中查找到,或者浏览维基百科的条目。 其中许多代号都令人发笑,如 Man-Eating Seals of Antiquity(古代食人海豹); Sheep on Meth(嗑药羊); Fle

xiezhongtian的专栏 769

一文搞定 GitHub SSH Key:生成、配置、好处全攻略

本文详细介绍了如何配置GitHub SSH Key,实现免密安全认证。主要内容包括:SSH协议的四大优势(免密登录、安全性高、稳定省心、支持自动化);Git身份配置步骤;检查本地SSH Key;生成RSA密钥对;添加密钥到SSH代理;复制公钥到GitHub;测试连接。配置完成后,开发者可通过SSH地址克隆仓库,实现push/pull全程免密操作。该方案显著提升Git使用效率,同时保障安全性,是开发者必备技能。

qq_62904883的博客 958

展讯Android11 需求bug修改记录

展讯Android11 需求bug修改记录

u010679318的博客 5415

手把手教你用EG2153搭建开关电源:SOP-8封装驱动芯片的5个设计技巧

本文详细介绍了使用EG2153自振荡半桥驱动芯片搭建开关电源的五个核心设计技巧。内容涵盖从深入理解芯片工作机制、频率编程计算误区、SOP-8封装的热管理方案,到死区时间评估与外部保护电路设计,以及实战调试与故障排查指南,旨在帮助工程师实现稳定可靠的小功率电源设计。

weixin_29200485的博客 378

6 赫斯曼网管软件industrial hivision用户管理

文章目录前言一、打开Industrial HiVision服务器二、在用户管理界面添加策略三、使用可选策略四、接受策略总结 前言 安装 Industrial HiVision 后,所有人都能广泛使用程序。安全起见,请进行相 关配置,对访问权限进行限制。 本文主要介绍用户管理基于某种角色模型。在访问角色中定义角色名称,通过分配访问权限给这些角色分配角色功能。例如,给管理人员自然要分配可用的权限,而观察员尽管可以登录,但没有能够进行更改的权限。Industrial HiVision 提供以下访问角色: 

t98746194的博客 1381

内核模块学习--编译自己的第一个内核模块hello_module

1,下载源码 xin@xin-desktop:~$  sudo apt-get source linux-image-2.6.32-38-generic 最终安装在目录:/usr/src/linux-2.6.32/ 2,编写源码hello_module.c和Makefile (1)新建一个目录mytest xin@xin-desktop:~/mytest$ vi hello_module

sun_x_t的专栏 2310

Quartus II设计程序计数器PC、由PC产生ROM的地址(含仿真)

设计程序计数器PC,正常工作模式下,系统启动,设置PC的初始值,之后每来一个clk,PC的输出值应该增加1;当程序发生跳转时,PC的值应该发生改变,级将跳转的地址值赋进行输出。PC后端连接一个ROM,由PC来产生ROM的地址,仿真进行验证。

m0_73700621的博客 1815

linux2.6.30.4 顶层Makefile文件分析(一)

下面的代码来自linux2.6.30.4的源码文件中的顶层Makefile文件,黑体部分是对Makefile文件的分析 VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 30 EXTRAVERSION = .4 NAME = Man-Eating Seals of Antiquity /*上面定义了5个变量,通过uname -a命令可以看到;注意makefil...

xiebingsuccess的博客 1716

MATLAB算法实战应用案例精讲-【数模应用】梯度提升决策树(GDBT)(附python代码)

GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。.........

qq_36130719的博客 2078

基于FPGA的万兆以太网学习(1)

万兆(10G) 以太网测速视频:SFP+屏蔽笼可以插入千兆或万兆光模块。SFP+信号定义与 SFP 一致。

baidu_34971492的博客 2250

大语言模型知识提取:如何通过提示工程唤醒LLM的沉默知识

大语言模型(LLM)的核心能力在于其参数中编码的海量参数化知识,这些知识构成了模型理解与生成的基础。然而,模型的实际表现往往受限于知识提取效率,即其可回忆知识远少于其实际存储的知识,形成了“知识-回忆”鸿沟。这一原理揭示了标准问答测试可能低估模型真实潜力。其技术价值在于,通过创新的提示策略,如思维链和元认知提示,可以有效激活模型的沉默知识,显著提升事实召回率与答案准确性。在应用场景上,这对于构建更可靠的问答系统、优化检索增强生成(RAG)流程以及设计更科学的模型评估基准至关重要。本文聚焦于通过系统化的实验验

weixin_30902251的博客 429

Redhawk: 为什么STA CHECK中switch cell覆盖率为0(STA file中switch control pin没有timing window)?

如题,做dynamic analysis时,不需要switch cell的timing window信息,但是做low power analysis需要做上电时switch cell的timing window就是必须的了,本文对switch cell control pin没有timing window (STA CHECK覆盖率为零)的这种现象做分析。

m0_61544122的博客 1197

Fullnat

FullnatLVS当前应用主要采用DR和NAT模式,但这2种模式要求RealServer和LVS在同一个vlan中,导致部署成本过高;TUNNEL模式虽然可以跨vlan,但RealServer上需要部署 ipip 模块等,网络拓扑上需要连通外网,较复杂,不易运维。为了解决上述问题,我们在LVS上添加了一种新的转发模式:FULLNAT,该模式和NAT模式的区别是:Packet...

weixin_34303897的博客 231

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

理解 Linux 动态库加载:LD_LIBRARY_PATH

flyfish

二分掌柜的 350

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

USB 技术系列 11 · USB Linux 驱动框架

本文系统解析Linux USB驱动框架,涵盖USB Core、HCD(xhci-hcd/dwc3)、类驱动(CDC/HID/Mass Storage)分层架构,详解usb_device_id匹配、probe/disconnect生命周期及Device Tree配置。结合RISC-V N300实战,揭示Host/Device双模式驱动开发核心逻辑,助力嵌入式BSP开发者掌握USB子系统全栈能力。

peter_pan_study的博客 256

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Linux-iostat命令详解

Linux命令学习记录

m0xin的博客 121

Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位

iptables 四表五链模型、firewalld zone 信任级别、云安全组与主机防火墙的关系与优先级,避坑改了防火墙把自己挡在服务器外面的翻车事故。

2502_91473995的博客 322

Linux rm 误删文件恢复实操教程

Linux使用rm删除文件时,并不会直接抹除磁盘上的数据,只是移除文件索引,让系统不再识别这块空间。只要没有写入新数据,原有扇区内容就会保留。新文件写入才有可能覆盖这些区域,一旦覆盖就很难找回。恢复的本质就是扫描磁盘,找到这些还存在、但索引丢失的数据条目,再把它们导出保存到其他分区。越早停止写入,恢复成功的概率越高。

海天数据恢复-winhex数据恢复教程 234

Windows/Linux下强实时运动控制内核(二):基于Qt的Delta机械手的开发应用

强实时运动控制内核MotionRT750下Qt开发Delta机械手的完整开发流程。

weixin_57350300的博客 241

Linux epoll 一篇讲透:从 select/poll 到红黑树、LT/ET,再到完整 TCP 服务器

一万个客户端已经连上服务器,眼下只有十个客户端发来了数据。服务器怎样把时间花在这十个连接上?理解这个问题,就抓住了 epoll 的主线。接下来,我们沿着“为什么需要它 → 接口怎么用 → 内核如何实现 → LT/ET 怎么写 → 完整服务器怎么运行”的顺序,把知识连起来。**阅读基础:**了解socketbindlistenaccept的基本用途即可。本文示例面向 Linux,服务器使用 C++17,实验脚本使用 Python 3。

2601_94861874的博客 199

Linux、Shell、MySQL 测试卷逐题细讲(下篇:MySQL)

本文为Linux、Shell、MySQL测试卷下半段MySQL部分逐题讲解,包含填空、选择与SQL分析三类题型。填空题覆盖COUNT、HAVING、DISTINCT、事务、约束、索引等核心语法;选择题辨析存储过程、索引类型、ACID、存储引擎、用户管理等考点。SQL大题围绕员工、部门、职位、地点四张关联表,考察多表连接、分组聚合、自连接、相关子查询、NULL处理等高频写法,标注LEFT JOIN统计计数、NULL判断、子查询别名等易错坑点,同时梳理试卷OCR识别带来的干扰问题,重点提示SQL实操中的常见失误

dongziwen1的博客 185

Linux 网络基础详解:IP、子网、路由与 ip、ss 命令实战

建库建表、增删改查、连接查询(内连左连右连)、聚合函数、权限控制 GRANT/REVOKE,每条命令配可运行示例,零基础也能跟着敲会 SQL 基础。

2502_91473995的博客 617

深入浅出聊聊 Linux 的 PageCache 与系统极致性能

本文深入浅出解析了 Linux PageCache 的核心机制,揭示其如何通过“延迟写、预读读”提升系统性能。以监控告警为切入点,阐明 free -h 中 buff/cache 并非真正占用,真正可用内存由 available 决定。结合 Kafka、Elasticsearch、MySQL 等实战场景,说明中间件如何依赖 PageCache 实现极致性能。强调不可手动清理缓存,并建议合理调优脏页参数,避免卡顿。最终指出:内存满≠危机,而是系统高效运行的体现。

小小默:进无止境 483

Linux 下 OpenCode 接入自定义大模型 API 教程:以 DeepSeek-V4.1-Flash-1017 为例

本文介绍在Linux下通过Python脚本配置OpenCode接入自定义大模型API(以DeepSeek-V4.1-Flash-1017为例),实现永久化、非侵入式配置。通过修改~/.config/opencode/opencode.json文件,添加OpenAI兼容服务商BLSC,注册模型并设置APIKey。支持命令行测试、默认模型设定及安全权限控制,操作简单且不影响原有配置。适用于各类支持OpenAI接口的自定义模型服务,提升开发灵活性与安全性。

qq_15060477的博客 130

【Linux 命令实战(02):文件与目录操作,掌握 pwd、ls、cd 三个核心命令】

命令作用cd /进入根目录cd ~进入当前用户家目录cd返回当前用户家目录cd …返回上一级目录cd …/…返回上两级目录cd -返回上一次所在目录进入指定目录命令核心用途常用参数pwd查看当前目录-L、-Pls查看文件和目录cd切换目录…、~、-Linux 文件系统的基本结构。绝对路径与相对路径的区别。Tab 自动补全。Shell 通配符。使用&&组合命令。这篇文章主要解决的是如何在 Linux 文件系统中快速定位目录。

一些微不足道的见解、希望能帮助各位 202
上一篇: LWN: 针对突发情况改善CFS分配器!
下一篇: LWN: io_uring中的ioctl()!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值