Linux的補丁知識
“補丁(patch)”是描述某個文件兩個不同版本之間區別的文件。程序 diff
會逐行比較原始文件與新文件,并以特定格式向標準輸出打印這些區別。程序 patch
可以讀取 diff
的輸出,并將那些改變應用于原始文件的另一個拷貝。(注意,“補丁”一詞既涉及 diff
命令的輸出,也涉及應用那個補丁的命令。)例如:
|
可見,兩個文件只有一行的區別。在命令行中列出的來自第 一個文件的那一行顯示時在最前有一個“-”,接下來是來自第二個文件的那一行,在命令行中顯示時最前而有一個“+”。直觀上,是從舊文件中“減去 (subtracting)”那一行,并“添加”來自新文件的那一行。記住,舊文件總是先出現,然后是較新的文件。
現在,讓我們來應用剛剛創建的補丁。補丁會將較舊版本的文件更新為較新版本的文件,所以我們應該對文件的較舊的版本應用補丁。
|
使用 patch
命令應用了 diff
命令的輸出后,“舊”文件現在與“新”文件相同。
接下來我們將學習如何應用補丁。需要應用某個補丁的一個常見的原因是為了獲得一個特定的內核版本,它不能從 ftp.kernel.org
作為一個大的 tarball 下載得到 —— 或者是為了獲得一個增量的補丁,這樣當大部分內核文件仍然相同時就不必去下載整個新內核。
內核補丁的命名和創建標準不是特別簡單。假定出于某種原因您需要得到內核 2.6.9-rc4
,而當前已經擁有版本 2.6.7
的完整的內核源代碼。為了從 2.6.7
升級到 2.6.9-rc4
需要下載下列補丁:
從 2.6.7
到 2.6.8
從 2.6.8
到 2.6.9-rc4
每一個 prepatch(兩個主版本之間的補丁,稱作 patch-2.6.x-rcN
,通常可以在 ftp 站點上名為 testing
的目錄中找到)都是針對前一個主版本的變化而創建的。常見的錯誤是下載了內核版本 2.6.9
,然后卻嘗試應用 2.6.9-rc4
prepatch。如果想要得到內核版本 2.6.9-rc4
,應該下載內核 2.6.8
,然后應用 2.6.9-rc4
prepatch。這是因為 2.6.9-rc4
是 2.6.9
的前身,不能顛倒。注意:命名的慣例和內核 prepatches 的位置會經常發生變化。可能不得不去閱讀 linux-內核郵件列表來得知最新補丁的保存位置及它們的名稱。
官方內核補丁的實現都支持您只需進行如下操作: