linux内核开发_Linux 内核的代码仓库管理与开发流程简介

3c533295282c4eafcb514212f9a048f8.gif

作者简介:老 U,致力于开源自由软件推广。

原创雄文:由泰晓读者投递的各类社区原创好文。

版权声明:本文最先发表于 “泰晓科技” 微信公众号,欢迎转载,转载时请在文章的开头保留本声明。

入门 Linux 内核学习时,首先得先了解一下 Linux 这个项目的源码仓库和版本的发布策略还是有必要的,今天就给大家简单掰一下,有什么说得不到位的,敬请拍砖补充。

Linux 的源码仓库主要有下面三个:

1. linux 仓库

f619bf80f87e4e3959a7b6d4d32acc1e.png

Linus Torvalds

这个一般指的是 Linus Torvalds 本尊亲自维护的那个仓库。该仓库的官方位置在:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/。大部分情况下我们访问的都是它的镜像,其中 “第二官方” 的镜像在 github,地址是:https://github.com/torvalds/linux。对于国内的朋友,推荐访问国内的 mirror,这里我就不列举了,大家网上搜搜。

这个仓库只有一个 master 分支,该分支由 Linus Torvalds 维护,对于不同的版本的内核是采用打 tag 的方式进行发布的,一般在发布一个正式版本之前,都会先发布一系列的候选(Release Candidate, 简称 RC)版本,比如 v5.4 最终版发布之前先发布了 v5.4-rc1 到 v5.4-rc8 共计 8 个 RC 版本,rc 值越大越接近最终版本,每个大版本,譬如 5.3 到 5.4 之间的发布周期目前稳定在大致在两个月左右。linux 仓库 中的 master 即我们常说的 mainline。

$ git tag | grep 5.4
v5.4
v5.4-rc1
v5.4-rc2
v5.4-rc3
v5.4-rc4
v5.4-rc5
v5.4-rc6
v5.4-rc7
v5.4-rc8

从 3.0 之后的版本,mainline 中的内核版本号只涉及主版本号和次版本号两个:x.y。我们会看到形如 x.y.z 版本的内核一般都是指 stable 版本,这也是接下来要给大家介绍的第二个仓库:linux-stable 仓库

2. linux-stable 仓库

ebdb7cb78c164a9fa2721e61e5f753cd.png

Greg Kroah-Hartman

这个仓库的官方位置在 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/。其 “第二官方” 的镜像在 github,地址是:https://github.com/gregkh/linux。其主要维护者是 Linux 社区的另一位大佬 Greg Kroah-Hartman。

linux-stable 仓库 基本上是前面介绍的 Linus 维护的 linux 仓库 的克隆,但在其基础上又创建了许多新的分支(branch),比如 linux-5.6.y 分支,用这些分支来维护 5.6 版本 stable 内核,linux-stable 仓库linux 仓库 的合作关系如下(以 5.6 版本为例):

  • 当 Linus Torvalds 在其维护的 linux 仓库 中发布了 5.6 版本后,commit 节点被 Linus 标记(tag)为 5.6,此时 Greg 就会从 linux 仓库 的 master 上 pull 一份过来,同时 checkout 出来一个分支 linux-5.6.y

  • 后续 linux-5.6.y 分支的维护将由 linux-stable 仓库 维护者进行维护,内核版本号变为 5.6.y,这里的 y 从 1 开始以此递增,也就是说 stable 版本会在主版本和次版本之后再多一个版本号,用来记录稳定版的更新序列号。

  • 自此之后 linux-5.6.y 分支将和 Linus 维护的 mainline 分支分道扬镳,mainline 继续新特性的开发,stable 则只会合入特定的一些 patch 以保证稳定性,并且定期打上 tag:譬如 v5.6.1v5.6.2 ......

  • 某些 Linux 版本会被宣布为长期维护(Long Term Support,简称 LTS)版本,譬如 5.4,则于其对应的 stable 分支  linux-5.4.y 会得到额外的垂青,也就是说该分支的维护时间会较长,多达几年,所以 v5.4.y 的 y 值会变得很大。

3. linux-next 仓库

29f66603b7cfa2d9995d855170444db3.png

Stephen Rothwell

linux-next 仓库 用于存放那些希望在下一个 merge 窗口被合入 mainline 的补丁代码。由 Stephen Rothwell 维护。官方原始仓库位置在:https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git

Linus 一般会在某个正式版本(譬如 v5.4)发布的同时就会为下一个版本(譬如 v5.5)开启一个 merge windows,所谓的窗口期你可以理解成一段时间,大概在两周左右,在此期间,linux 仓库 的 master 分支会从 linux-next 仓库 以及各个子模块的维护者处接收 patch 并合入 master,当合入一些 patch 后,就会形成下一个版本的候选版本(这里是 v5.5-rc1),然后一般会经历多个 RC 版本,等待时机成熟后就会正式发布下一个版本的 Mainline 内核(这里是 v5.5)。

所以说 linux-next 仓库 已经成为内核开发过程中不可或缺的一部分;也就是说,如果你希望你的补丁进入 mainline 内核,特别是进入下一个主线版本,那你就得在相应的合并窗口打开之前的一段时间争取将你的补丁被接纳进入 linux-next 仓库,当然这要取决于你的能力外加一点点运气 ;)。

以上就是和 Linux 相关的三个主要开发代码仓库,大家搞明白了么?

参考文献

  • Kernel 官网有关 release 分类的说明: https://www.kernel.org/category/releases.html
  • Working with linux-next: https://www.kernel.org/doc/man-pages/linux-next.html
  • The linux-next and -stable trees: https://lwn.net/Articles/571980/

奖金+赠书+星球会员,"泰晓科技" 社区推出三大举措加速原创孵化,速速看过来(请点击下方图片链接):

997fdf0d245c05057eeaef7bd1a6a296.png

c1f6d18fc52ff970e1059875d8f962f8.png

扫 码 关 注 我 们   

再 + 好 友 tinylab

进 泰 晓 技 术 群

泰  晓  科  技

1c3a68f857e3e5e9d971bab52d081afd.png

f57202ec36bc37cffe650581a4ea44d8.png关注“泰晓科技”!点“在看”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Repeater,DataList,DataGrid 【转】

输出表: string a"ProviderMicrosoft.Jet.OLEDB.4.0;Data Sourcec:\\data.mdb;Persist Security InfoFalse;"; OleDbConnection cnnew OleDbConnection(a); OleDbCommand cmnew OleDbCommand("select * from test2",cn); cn.Open(); OleDbDataR…

Java中八种基本数据类型占用字节空间总结

一、Java四大数据类型分类 1、整型 byte 、short 、int 、long 2、浮点型 float 、 double 3、字符型 char 4、布尔型 boolean 二、八种基本数据类型 三、数据类型详细介绍 整型(byte、short、int、long) 虽然byte、short、int、long 数据类型…

Google编程题:最小操作数

给定一个原串和目标串,能对源串进行如下操作: 1.在给定位置插入一个字符 2.替换任意字符 3.删除任意字符 要求完成一下函数,返回最少的操作数,使得源串进行这些操作后等于目标串。源串和目标串长度都小于2000。动态创建的了二维…

jdbc连接mysql传参_将参数传递给JDBC PreparedStatement

我正在尝试为我的程序制作验证类。我已经建立了与MySQL数据库的连接,并且已经在表中插入了行。该表由firstName,lastName和userID领域。现在,我想通过构造函数的参数在数据库中选择特定的行。import java.sql.*;import java.sql.PreparedStat…

String类能被继承吗,为什么?

不能被继承,因为String类有final修饰符,而final修饰的类是不能被继承的。 Java对String类的定义: final修饰符的用法: 1.修饰类 当用final修饰一个类时,表明这个类不能被继承。final类中的成员变量可以根据需要设为…

Java实现折半查找(二分查找)的递归和非递归算法

Java二分查找实现,欢迎大家提出交流意见./***名称:BinarySearch*功能:实现了折半查找(二分查找)的递归和非递归算法.*说明:* 1、要求所查找的数组已有序,并且其中元素已实现Comparable<T>接口,如Integer、String等.* 2、非递归查找使用search();,递归查找使用sear…

webstorm 不知道手贱点了什么,有时候会自动删除分号

https://segmentfault.com/q/1010000009184137?_ea1845711 webstorm 不知道手贱点了什么&#xff0c;有时候会自动删除分号 webstorm javascript 繁忙的耗子 4月25日提问关注 4 关注收藏 0 收藏&#xff0c;470 浏览问题对人有帮助&#xff0c;内容完整&#xff0c;我也想…

mysql中的所有类型_mysql中常用的数据类型

MySQL是一种关系数据库管理系统&#xff0c;关系数据库将数据保存在不同的表中&#xff0c;而不是将所有数据放在一个大仓库内&#xff0c;这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策&#xff0c…

final和static的区别

很多时候会容易把static和final关键字混淆&#xff0c;static作用于成员变量用来表示只保存一份副本&#xff0c;而final的作用是用来保证变量不可变。看下面这个例子 每次打印的两个j值都是一样的&#xff0c;而i的值却是不同的。从这里就可以知道final和static变量的区别了。…

用Visual C#创建Windows服务程序

用Visual C#创建Windows服务程序一&#xff0e;Windows服务介绍&#xff1a;Windows服务以前被称作NT服务&#xff0c;是一些运行在Windows NT、Windows 2000和Windows XP等操作系统下用户环境以外的程序。在以前&#xff0c;编写Windows服务程序需要程序员很强的C或C功底。然而…

实现MySQL高可用群集配置_配置高可用性的MySQL服务器负载均衡群集

mysql -u root -pUSE mysqlclustertest;SELECT * FROM testtable;quit;SELECT查询出的结果应该依然是:mysql> SELECT * FROM testtable;——| i |——| 1 || 2 |——2 rows in set (0.17 sec)Ok,所有的测试都正常,现在让我们再次启动sql1.test.com节点&#xff1a;sql1.exam…

清除掉AD的相关属性!

今天有朋友问我怎么清除掉AD 的相关属性&#xff0c;由于他们的用户都设置了登录到属性&#xff0c;这样我们的用户就仅仅能登陆他须要设置的计算机。对于兴许规则的变更的时候&#xff0c;我们的管理员配置起来就比較复杂。他须要非常长的时间去一个一个清除掉相关的属性。这对…

java中String、StringBuffer、StringBuilder的区别

java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类&#xff0c;他们之间的区别也是经常在面试中会问到的问题。现在总结一下&#xff0c;看看他们的不同与相同。 三者共同之处: 都是final类,不允许被继承&#xff0c;主要是从性能和安全性上考虑的&#…

《Ext详解与实践》节选:自定义单元格的显示格式

有时候&#xff0c;需要在Grid中显示一个链接&#xff0c;或根据数字的大小显示不同的颜色&#xff0c;又或者使用固定格式显示记录编号等&#xff0c;这就需要自定义单元格的显示格式。在Ext的Grid可以很容易的实现自定义单元格的显示格式。在定义Grid的ColumnModel的时候&…

js学习总结----案例之多级菜单js版本

具体代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style>*{margin:0;padding:0;font-size:14px;}ul,li{list-style:none;}.box{margin:10px;pad…

讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候, 他们的执行顺序

此题考察的是类加载器实例化时进行的操作步骤&#xff08;加载–>连接->初始化&#xff09;。 父类静态变量、 父类静态代码块、 子类静态变量、 子类静态代码块、 父类非静态变量&#xff08;父类实例成员变量&#xff09;、 父类构造函数、 子类非静态变量&…

转载:成功应用ERP的思路和方法分析

企业ERP的应用现状一是应用数量。据我不完全统计&#xff0c;时至今日&#xff0c;全国有一万多家企业在集成应用ERP&#xff0c;这和国家统计局统计提供的266,090个国有及规模以上非国有企业的总数相比&#xff0c;仅占百分之四。二是应用时间。从1981年应用第一套ERP到2007年…

mysql无法找到事件id100描述_解决“事件 ID ( 487 )的描述(在资源( Zend Optimizer )中)无法找到”...

事件类型: 错误事件来源: Zend Optimizer事件种类: 无事件 ID: 487日期: 2006-8-18事件: 0:17:36用户: N/A计算机: COMPUTER描述:事件 ID ( 487 )的描述(在资源( Zend Optimizer )中)无法找到。本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息。您可能…

正则化线性回归

1. 模型的欠拟合、过拟合无论是回归问题还是分类问题都可能存在模型的欠拟合和过拟合的情况。下图是回归问题中的例子&#xff1a;第一个模型欠拟合&#xff0c;第二个模型刚好拟合&#xff0c;第三个过拟合。下图是分类问题中的例子&#xff1a;第一个模型欠拟合&#xff0c;第…

用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。

JAVA Map的几种类型: HashMap、HashTable、LinkedHashMap和TreeMap。 HashMap HashMap 是一个最常用的Map&#xff0c;它根据键的HashCode值存储数据&#xff0c;根据键可以直接获取它的值&#xff0c;具有很快的访问速度。 遍历时&#xff0c;取得数据的顺序是完全随机的。 …