Linux 補丁

原文出處:  http://blog.chinaunix.net/uid-22235894-id-1782003.htmlhtml

 

作補丁:diff -Naurp --exclude='.svn' orig.dir new.dir > dest.patchlinux

 
作補丁:diff -Naurp orig.dir new.dir > dest.patch
打補丁: cd orig.dir
       patch -p1 < ../dest.patch
 
我對DebianPackage-1.0修改,改後爲DebianPackage-1.1
打包時要先清除編譯生成的文件,運行debclean
#cd ~/DebianPackage-1.0
#debclean
#cd ~/DebianPackage-1.1
#debclean
#cd
#diff -Naurp DebianPackage-1.0 DebianPackage-1.1 > DebianPackage-1.1.patch
 
打補丁:
a
#cd DebianPackage-1.0
#patch -p1 < ../DebianPackage-1.1.patch
b
#patch -p2 -d DebianPackage-1.0 < DebianPackage-1.1.patch

轉:

經過diff工具生成補丁, patch工具打上補丁.ide

在使用diff以前, 你須要保留一份未修改過的源碼, 而後在其它地方修改源碼的一份拷貝. diff對比這兩份源碼生成patch. 修改過的源碼必須保留原來的文件名, 例如, 若是你修改源碼中的a.c文件, 那麼, 修改後的文件仍是名爲a.c, 在修改以前你能夠複製a.c爲a.orig.c進行備份.svn

diff命令必須在整個Linux源碼的根目錄的上一級目錄中執行.函數

1. 爲單個文件生成補丁工具

diff -up linux-2.6.28.8/net/sunrpc/svc.orig.c linux-2.6.28.8/net/sunrpc/svc.cui

這條命令會產生相似以下的輸出, 你將它重定向到一個文件中, 這個文件就是patch.spa

--- linux-2.6.28.8/net/sunrpc/svc.orig.c 2009-03-17 08:50:04.000000000 +0800.net

+++ linux-2.6.28.8/net/sunrpc/svc.c 2009-03-30 19:18:41.859375000 +0800unix

@@ -1050,11 +1050,11 @@ svc_process(struct svc_rqst *rqstp)

參數詳解:

-u 顯示有差別行的先後幾行(上下文), 默認是先後各3行, 這樣, patch中帶有更多的信息.

-p 顯示代碼所在的c函數的信息.

2. 爲多個文件生成補丁

diff -uprN linux-2.6.28.8.orig/net/sunrpc/ linux-2.6.28.8/net/sunrpc/

這條命令對比了linux-2.6.28.8.orig/net/sunrpc/和linux-2.6.28.8/net/sunrpc/兩個目錄的源碼差別. 不像只須要單個文件, 若是修改多個文件, 那麼就須要拷貝整個Linux源碼樹.

參數詳解:

-r 遞歸地對比一個目錄和它的全部子目錄(即整個目錄樹).

-N 若是某個文件缺乏了, 就看成是空文件來對比. 若是不使用本選項, 當diff發現舊代碼或者新代碼缺乏文件時, 只簡單的提示缺乏文件. 若是使用本選項, 會將新添加的文件全新打印出來做爲新增的部分.

3. 打補丁

生成的補丁中, 路徑信息包含了你的Linux源碼根目錄的名稱, 但其餘人的源碼根目錄多是其它名字, 因此, 打補丁時, 要進入你的Linux源碼根目錄, 而且告訴patch工具, 請忽略補丁中的路徑的第一級目錄(參數-p1).

patch -p1 < patch1.diff

相關文章
相關標籤/搜索