Linux的补丁知识

发表于:2007-07-04来源:作者:点击数: 标签:
补丁的工作方式 “补丁(patch)”是描述某个文件两个不同版本之间区别的文件。程序 diff 会逐行比较原始文件与新文件,并以特定格式向标准输出打印这些区别。程序 patch 可以读取 diff 的输出,并将那些改变应用于原始文件的另一个拷贝。(注意,“补
 

补丁的工作方式

“补丁(patch)”是描述某个文件两个不同版本之间区别的文件。程序 diff 会逐行比较原始文件与新文件,并以特定格式向标准输出打印这些区别。程序 patch 可以读取 diff 的输出,并将那些改变应用于原始文件的另一个拷贝。(注意,“补丁”一词既涉及 diff 命令的输出,也涉及应用那个补丁的命令。)例如:

$ cat old/file.txtThisisasimplefile.$ cat new/file.txtThisisaslightly more complexfile.$ diff -uNr old newdiff -uNr old/file.txt new/file.txt--- old/file.txt        Tue May 28 23:00:21 2002+++ new/file.txt        Tue May 28 23:01:01 2002@@ -1,5 +1,5 @@ This is a-simple+slightly more complex file.


可见,两个文件只有一行的区别。在命令行中列出的来自第一个文件的那一行显示时在最前有一个“-”,接下来是来自第二个文件的那一行,在命令行中显示时最前而有一个“+”。直观上,是从旧文件中“减去(subtracting)”那一行,并“添加”来自新文件的那一行。记住,旧文件总是先出现,然后是较新的文件。

现在,让我们来应用刚刚创建的补丁。补丁会将较旧版本的文件更新为较新版本的文件,所以我们应该对文件的较旧的版本应用补丁。

$ diff -uNr old new > patchfile$ cd old$ patch -p1 < ../patchfilepatching file file.txt$ cat file.txtThisisaslightly more complexfile.


使用 patch 命令应用了 diff 命令的输出后,“旧”文件现在与“新”文件相同。

应用补丁

接下来我们将学习如何应用补丁。需要应用某个补丁的一个常见的原因是为了获得一个特定的内核版本,它不能从 ftp.kernel.org 作为一个大的 tarball 下载得到 —— 或者是为了获得一个增量的补丁,这样当大部分内核文件仍然相同时就不必去下载整个新内核。

内核补丁的命名和创建标准不是特别简单。假定出于某种原因您需要得到内核 2.6.9-rc4,而当前已经拥有版本 2.6.7 的完整的内核源代码。为了从 2.6.7 升级到 2.6.9-rc4 需要下载下列补丁:

2.6.72.6.8

2.6.82.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-rc42.6.9 的前身,不能颠倒。注意:命名的惯例和内核 prepatches 的位置会经常发生变化。可能不得不去阅读 linux-内核邮件列表来得知最新补丁的保存位置及它们的名称。

官方内核补丁的实现都支持您只需进行如下操作:

cd <your linux source tree>patch -p1 < ../patchfile


patch 命令的 -p1 选项表示的是“除去直到第一个正斜杠的部分路径名,然后尝试对除去了路径名的文件应用补丁”。

如果所有这些看起来太过复杂和令人厌烦,那么可能应该去尝试使用 Cogito。本部分的最后有对 Cogito 的简短介绍。

创建一个补丁

要记住的第一件事情是,始终要在某个地方保存内核源代码的一个未经改动的、原始的版本。不要在它里面进行编译,不要编辑其中的任何文件,不要对它做任何事情 —— 只是拷贝它,来得到源代码树的工作拷贝。原始内核源代码应该是在一个名为 linux.vanillalinux.orig 的目录中,并

原文转自:http://www.ltesting.net