Linux核心補丁與patch diff使用詳解

2021-06-27 17:48:23 字數 3251 閱讀 8820

**自:

注意下述內容部分不能應用到3.x系列核心。

一、linux核心版本型別及patch簡介:

1) 2.6.x為基礎版本,patch位置:

2) 2.6.x.y為2.6.x基礎版本之上派生出來的修正版本,稱為-stable核心版本,patch位置:

3) 2.6.x.rcn(

release candidate)核心,是在2.6.(x-1)之上派生出來的之後版本的侯選版本;此種核心

不穩定,發布的時候表示可以用來測試了;

例如對2.6.21加了新功能後派生出2.6.22-rc1,patch位置:

testing/

4) git核心是每日核心樹的快照,此型別比rc核心更不穩定,從基礎版本或rc版本派生出來;

例如2.6.26-git1,2.6.26-rc9-git2,patch位置:

snapshots/

5) mm核心是專門針對核心的mm模組維護的版本,類似於git版本從基礎版本或rc版本派生出來;

例如2.6.21-mm2, 2.6.21-rc2-mm1,patch位置:

不同型別核心的patch名稱在前面加上「patch-」(mm核心除外,直接用的版本號),例如:patch-2.6.21, patch-2.6.21.7, patch-2.6.26-git1, patch-2.6.26-rc9-git2, 2.6.21-mm2, 2.6.21-rc2-mm1

二、核心補丁型別

1) 增量補丁

同一型別的版本的補丁是用本版本對相鄰的前乙個版本製作的。

例如,patch-2.6.21是對2.6.20做的補丁,patch-2.6.22是對2.6.21做的補丁,這就是增量補丁。

2.6.x基礎版本核心,採用的是增量補丁。

2) 非增量補丁

也增量補丁相反,是基本某一固定版本製作的補丁,而非相鄰的前乙個版本。

例如,patch-2.6.21.3是2.6.21.3版本相對於2.6.21基礎版本做的補丁,patch-2.6.21.4是2.6.21.4版本相對於2.6.21基礎版本做的補丁,也就是說2.6.21.4與2.6.21.3之前沒有補丁可用。

rc核心,git核心和mm核心都是非增量補丁,都是相對於當前基礎版本或rc版本製作出來的補丁。

另外,對於rc核心,git核心,相應的patch目錄下面有inc目錄中,包含有增量補丁。

三、使用patch命令為核心補丁

1.現有基礎核心版本2.6.21,想轉成2.6.21.7核心stable版本,應該怎麼辦?

a) 去

b) linux shell下面,cd到2.6.21核心原始檔根目錄(linux-2.6.21),將patch-2.6.21.7也放在本目

錄(命令執行的當前止錄),執行patch命令::patch -p1 < patch-2.6.21.7

(p1的意思是忽略patch檔案(即diff檔案)內容中的第乙個路徑)

c) 打完補丁後,即變成了2.6.21.7的核心了,如果想回退至2.6.21基礎版本,執行如下命令即可:

patch -r -p1 < patch-2.6.21.7

(-r的引數意思表示回退這個patch)

2.現有基礎核心版本2.6.21,想轉成2.6.23.1核心stable版本,應該怎麼辦?

b) patch -p1 < patch-2.6.22    變成了2.6.22

patch -p1 < patch-2.6.23    變成了2.6.23

patch -p1 < patch-2.6.23.1  變成了2.6.23.1

c) 回退操作

patch -r -p1 < patch-2.6.23.1  變成了2.6.23

patch -r -p1 < patch-2.6.23    變成了2.6.22

patch -r -p1 < patch-2.6.22    變成了2.6.21

3.現有基礎核心版本2.6.21-git2,想轉成2.6.22-rc1-mm2核心stable版本,應該怎麼辦?

並設定執行路徑和環境;

b) patch -r -p1 < patch-2.6.21-git2    變成了2.6.21

patch -p1 < patch-2.6.22-rc1        變成了2.6.22-rc1

patch -p1 < 2.6.22-rc1-mm2          變成了2.6.22-rc1-mm2

c) 回退操作

patch -r -p1 < 2.6.22-rc1-mm2          變成了2.6.22-rc1

patch -r -p1 < patch-2.6.22-rc1        變成了2.6.21

patch -p1 < patch-2.6.21-git2          變成了2.6.21-git2

到這裡應該明白了核心打補丁是怎麼一回事兒了吧,就這麼簡單。

四、使用patch和diff動手製作補丁

1.diff命令製作單個patch

diff -un src dst > src2dst.patch

我們的patch製作完畢了,原來patch實際上就是diff生成的內容,簡單吧。

patch -p0 < src2dst.patch  將src檔案打補丁變成dst檔案

(注:因為diff命令生成的內容的路徑是當前路徑,因此-p0表示不去除路徑)

自己實際操作一下就明白了。

2.diff命令製作多個patch - patch合併

a) 方法一

對多個檔案依次使用diff命令生成多個patch,然後將這些patch合併成乙個patch檔案即可(如使用重

定向,對於patch1和patch2:echo patch1 > patch1patch2;echo patch2 >> patch1patch2);

b) 方法二

對資料夾的diff命令:diff -unr srcdir dstdir > all.patch

五、總結

diff -urn src dst > patch        生成patch

patch -p[0-n] -s < patch         使用patch,-s引數即silent,表示終端無資訊輸出

patch -rp[0-n] < patch           回退patch

patch -p[0-n] --dry-run < patch  只顯示執行結果,不實際生效

另外,當patch命令檢測到衝突時會彈出提示,還會生成一些.rej檔案,可檢視.rej檔案來手動修改。

日常的學習或工作中,使用diff+patch可以提公升重複合**的效率。

Linux下Patch製作(打補丁)

在linux下我們可以使用製作patch的方式給 打補丁,用於修復bug 漏洞等問題。其本質就是通過diff命令比較修改前後的 差異,將結果另存為乙個patch檔案,即補丁檔案。其他人通過patch命令將發布的patch檔案中的內容同步到自己的 中,即可完成 的公升級。1 新建乙個demo demo...

Linux 小知識翻譯 補丁 (patch)

這次,聊聊補丁。當有bug或者安全漏洞的時候,就會發布補丁。打上補丁之後,就能解決相應的bug或者安全漏洞。那麼,補丁 到底是什麼呢?補丁 只有少量的 一般都是對程式的一部分進行更新或者追加,包括bug修正,安全漏洞修正,功能追加或者變更等等。當然,只有 補丁 是無法執行的。即,只有將 補丁 附加到...

linux學習之patch 打補丁

1.patch用法 patch p 剝離層級 2.patch命令示例 cd u boot 1.1.6 進入原檔案目錄 patch p1 p 表示去掉補丁檔案裡路徑的第幾部分。1 表示去掉第1個 表示返回上乙個目錄,因為這補丁檔案和原檔案在同一目錄下 為什麼需要輸入 p1?如下圖所示,可以看到補丁檔案...