如果你對新打的補丁不很滿意,而你想回復到以前較早的內核版本去,那么我們從上面描述的第6步開始逆順序操作即可(為什么要采取撤消補丁的方式來回到先前版本的理由很多,我們就不說了):
a) 將內核源代碼的版本恢復到先前的名字:
mv linux-2.4.5kh3 linux-2.4.5kh2
b) 執行那條奇妙的patch命令:
patch -RE -p0 < patch-2.4.5kh3
這里,-E選項說明如果發現了空文件,那么就刪除它;-R選項說明在補丁文件中的“新”文件和“舊”文件現在要調換過來了(實際上就是給新版本打補丁,讓它變成老版本,但是這里是否一定要先更改源代碼的目錄名我還不明確,需要作實驗)。
這里有一個疑問,就是為什么要進行代碼目錄的改名?
*****************************************************************************
避免make distclean操作
*****************************************************************************
根據文檔/usr/src/linux/Documentation/SubmittingPatches所描述的,運行一個沒有make distclean的遞歸diff,使用如下命令:
diff -ruN -X dontdiff linux-2.4.5kh2 linux-2.4.5kh3 > patch.diff
dontdiff是一個可執行文件,它可以從下面這個網址進行下載:
但是,就我而言,我還是不知道為什么要這么做,或者說不進行make distclean的目的是什么。如果有那位朋友知道的話,非常感謝你告訴我一聲,或者是把這部分內容補充到這份文檔中。
制作一個官方的補丁文件
你已經安裝了一個新的Linux,我們稱它為Linux-2.4.2。但是差不多每個月,都會有新的Linux補丁推出,這些補丁或者修補了一些問題,或者支持了一些新的硬件或其它新的特性。所以,當你安裝了Linux-2.4.2幾個月以后,就會有新的穩定發行版推出,我們稱它為Linux-2.4.5。
我們將要描述的過程解釋了你如何最簡便的將自己的Linux從2.4.2升級為最新的2.4.5。
關鍵的竅門在于使用一系列的補丁文件。
*****************************************************************************
第0步:理解官方的Linux補丁文件是如何制作的。
*****************************************************************************
每一個官方的Linux補丁文件都是一個使用diff工具在兩個連續的Linux版本中所有文件間產生的diff文件。
作為一個例子,我們假定這個補丁文件是用來將Linux-2.4.2升級到Linux-2.4.5的,這個補丁文件通過如下方法獲得:
cd /usr/src/linux-2.4.2
make distclean
cd /usr/src/linux-2.4.3
make distclean
ln -s linux-2.4.2 linux
diff -ruN linux linux-2.4.3 > patch_2.4.3
gzip patch_2.4.3
這些補丁文件按照順序使用gzip壓縮,以節省Linux發行版本站點的下載時間。例如我們生成的補丁文件——patch_2.4.3.gz,就是一個經過壓縮的補丁文件。
Linux官方補丁總是認為缺省的源代碼子樹名字為“Linux”。這種方法可能有點混淆,但是它允許一些(版本)連續的補丁不用修改源代碼子樹的名字就可以連續的被修改到源代碼子樹上。(下面我們可以看到)
這些補丁文件的名字都是標準的:
patch_2.4.3 記錄著linux-2.4.3 和 linux-2.4.2之間的版本差異。
patch_2.4.4 記錄著linux-2.4.4 and linux-2.4.3之間的版本差異。
patch_2.4.5 記錄著linux-2.4.5 and linux-2.4.4之間的版本差異。
在我們的例子中,我們正好需要這3個補丁文件,他們的名字是patch_2.4.3.gz、patch_2.4.4.gz和patch_2.4.5.gz,用來將Linux-2.4.2升級到Linux-2.4.5。
*****************************************************************************
第1步:升級Linux源代碼目錄的名字和Linux符號連接。
*****************************************************************************
假定內核源代碼的路徑是:/usr/src/linux-2.4.2/
并且所有需要的壓縮補丁文件都已經存放在目錄/usr/src 中了。
執行下列命令:
cd /usr/src
mv linux-2.4.2 linux-2.4.5
rm linux
ln -s linux-2.4.5 linux
*****************************************************************************
第2步:清理源代碼目錄(刪除中間目標文件和配置文件)。
*****************************************************************************
執行下列命令:
cd linux
make distclean
*****************************************************************************
第3步:解壓縮補丁文件。
*****************************************************************************
in our example, execute:
cd /usr/src
gunzip patch-2.4.3.gz
gunzip patch-2.4.4.gz
gunzip patch-2.4.5.gz
*****************************************************************************
第4步:重復執行patch命令。
*****************************************************************************
執行下列命令:
for i in 3 4 5; do
patch -p0 < patch_2-4.$i
done
其中
patch -p0 < patchfile
命令作用在輸入的補丁文件上,并將對應的老版本的內核源代碼中所有的文件和子目錄升級到對應的新版本(在我們的例子中,老版本的內核源代碼目錄是/usr/src/linux)。在我們的例子中,舊的內核源代碼版本是Linux-2.4.5kh2。這里參數–p0用來保證文件名不被改變(既不被修改,也不被刪除)。
目標目錄是Linux,就是說舊版本的內核源代碼經過patch以后,就被升級成了新版本的內核源代碼。


