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-内核邮件列表来得知最新补丁的保存位置及它们的名称。
官方内核补丁的实现都支持您只需进行如下操作: