linux内核开发_Linux 内核的代码仓库管理与开发流程简介
作者簡介:老 U,致力于開源自由軟件推廣。
原創雄文:由泰曉讀者投遞的各類社區原創好文。
版權聲明:本文最先發表于?“泰曉科技” 微信公眾號,歡迎轉載,轉載時請在文章的開頭保留本聲明。
入門 Linux 內核學習時,首先得先了解一下 Linux 這個項目的源碼倉庫和版本的發布策略還是有必要的,今天就給大家簡單掰一下,有什么說得不到位的,敬請拍磚補充。
Linux 的源碼倉庫主要有下面三個:
1. linux 倉庫
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.4v5.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 倉庫
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.1、v5.6.2 ......
某些 Linux 版本會被宣布為長期維護(Long Term Support,簡稱 LTS)版本,譬如 5.4,則于其對應的 stable 分支 ?linux-5.4.y 會得到額外的垂青,也就是說該分支的維護時間會較長,多達幾年,所以 v5.4.y 的 y 值會變得很大。
3. linux-next 倉庫
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/
?
獎金+贈書+星球會員,"泰曉科技" 社區推出三大舉措加速原創孵化,速速看過來(請點擊下方圖片鏈接):
?掃 碼?關 注 我?們? ?
再 + 好 友 tinylab
進 泰 曉?技 術?群
泰? 曉? 科? 技
關注“泰曉科技”!點“在看”
總結
以上是生活随笔為你收集整理的linux内核开发_Linux 内核的代码仓库管理与开发流程简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python函数应用实例_【Python
- 下一篇: Python 装饰器初探