**自:
注意下述內容部分不能應用到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?如下圖所示,可以看到補丁檔案...