![]()
“补丁(patch)”是描述某个文档两个不同版本之间区分的文档。程式
可见,两个文档只有一行的区分。在命令行中列出的来自第一个文档的那一行显示时在最前有一个“-”,接下来是来自第二个文档的那一行,在命令行中显示时最前而有一个“+”。直观上,是从旧文档中“减去(subtracting)”那一行,并“添加”来自新文档的那一行。记住,旧文档总是先出现,然后是较新的文档。 现在,让我们来应用刚刚创建的补丁。补丁会将较旧版本的文档更新为较新版本的文档,所以我们应该对文档的较旧的版本应用补丁。
使用 接下来我们将学习怎样应用补丁。需要应用某个补丁的一个常见的原因是为了获得一个特定的内核版本,他不能从 内核补丁的命名和创建标准不是特别简单。假定出于某种原因您需要得到内核 从 从 每一个 prepatch(两个主版本之间的补丁,称作 官方内核补丁的实现都支持您只需进行如下操作:
patch 命令的 假如任何这些看起来太过复杂和令人厌烦,那么可能应该去尝试使用 Cogito。本部分的最后有对 Cogito 的简短介绍。 要记住的第一件事情是,始终要在某个地方保存内核源代码的一个未经改变的、原始的版本。不要在他里面进行编译,不要编辑其中的任何文档,不要对他做任何事情 ?? 只是拷贝他,来得到源代码树的工作拷贝。原始内核源代码应该是在一个名为 在对工作拷贝进行了修改后,将使用
原始内核源代码和新的内核源代码之间的任何区分现在就已在
这将不会创建一个标准格式的补丁,而且没有人会去费力尝试您的补丁,因为他难以应用。 既然已创建了一个补丁,那么阅读他吧!几乎能够肯定,补丁中包含的有些文档您不希望将他们作为补丁的一部分,比如旧的编辑器备份文档、对象文档,或在研发过程中创建的随机垃圾文档。要除去这些文档,能够让 diff 忽略特定的文档,能够删除这些文档,或能够手工编辑 diff。在手工编辑补丁之前一定要理解补丁的格式,否则很可能创建出一个不能应用的补丁。 但是要记住,这会删除 另外,要确保补丁位于正确的目录中。新的行是不是前面有“+”的那些行?并且,要确保那些是您所希望执行的修改。很容易使用完全错误的源代码树完成 diff。 当认为自己已获得了补丁的最终版本之后,将他应用到原始的源代码树(不要破坏原始源代码树的惟一拷贝)。假如他不能应用而又没有报错,那么重新去完成那个补丁。 同样,假如这这看起来太过复杂,可能应该去尝试使用 Cogito。 创建了一个补丁之后,您会希望和其他人共享他。理想的情形是,您自己测试那个补丁,也让其他人去测试他,并让其他人去阅读那个补丁本身。总之,您会希望自己的补丁没有 bug、合理编写、易于应用。 始终要自己编译和测试自己的补丁。您会看到有人向 linux-内核提交“完全没有测试的(totally untested)”补丁,但不会对其倾心 ?? 完成没有经过测试的补丁可能是个没用的补丁。内核维护人员曾不止一次发布根本不能编译的内核。人无完人 ?? 在任何情况下都要测试您的补丁。 确保代码和相关代码相符合,并遵循内核代码风格惯例。虽然查看其他源文档通常是了解当前惯例的最好途径,但是还应去查看文档 假如您的补丁难以应用,那么他几乎肯定不会被认可。除了要使用适当层次的目录创建补丁以外,创建他时所针对的内核需要和其他人将补丁应用到的内核相同(或几乎相同)。所以,假如想让 XYZ 来应用您的补丁,那么要确定 XYZ 正在使用的内核的版本,然后尝试尽可能使用和之相近的内核。通常是内核维护人员所发布的最新 vanilla 内核。 例如,假如有一个针对 这个问题的答案是“看情况而定”。订阅 Linux 内核邮件列表连同和您的研究领域更相关的列表;您将了解到谁是适合的人选。 尝试确定最明确参和维护您正在修改的那部分内核的人。假如您对 bar 子系统中的 foo 驱动程式进行了修改,而 foo 驱动程式有一个维护人员,那么您可能应该将补丁提交给 foo 的维护人员,只有当 foo 的维护人员不理您时再提交给 bar 子系统的维护人员。 顶层内核源代码目录中的 另外,要将您的补丁发送到 linux-kernel@vger.kernel.org 的 Linux 内核邮件列表(除非有理由不这样做)。除了维护人员以外的其他研发者可能需要知道您的修改。他们还可能会提供帮助,给出注解和建议。 大部分补丁都足够小,能够包含在邮件中。虽然有些维护人员拒绝接收附件中的补丁,有些维护人员拒绝接收 MIME-编码 的补丁,但是任何维护人员都会接收包含在纯文本邮件主体中的补丁。确保邮件客户机不会破坏您的补丁 ?? 假如不能确定,那么将补丁用邮件发送给自己并应用他,这样来确保其他人也能够应用他。大部分 Linux 邮件列表希望补丁拥有以字符串 假如您的补丁太大,不能通过电子邮件发送(大约 40 KB 或更大),那么将他放在其他人能够下载的 Web 页面上或 ftp 站点上,然后把 URL 放在电子邮件中。 源代码树中的 假如任何事实都表明您的补丁有适当的格式、是正确的而且修订了一个 bug,那么提交他将简单得多。更重要的是,您的补丁需要有吸引力、适时、有趣,而且要考虑维护人员的自尊心。在大部分情况下,简单的 bug 修复会被立即认可。但是,有时您会碰到更大的问题。重要的是要记住不能去从事 Linux 维护人员系统周边的工作;您的工作必须深入其中。 学习关于 linux-内核的一些思路,人们试图以这些思路来说服他人将自己的补丁融入内核。假如您的补丁没有被认可,那么去聆听其他人是怎样评价他,并尝试解决他的问题。最常被拒绝的补丁是特性(feature)补丁 ?? 添加的新特性被其他维护人员认为没有吸引力。不要浪费时间去尝试让补丁被认可,只需要单独维护他。假如足够多的人发现那个补丁有用,那么在下载并使用您的补丁的人中,您会被认为是一位有帮助的内核修改者而获得名望。 有时,维护人员只是因为他或她的自尊心而不认可某个补丁。在这种情况下,惟一的选择是维护一个单独于主内核的更好版本代码。通常,在一段时间之后,被证实是更好的外部维护的代码将取代内核内部代码 ?? 这是成为维护人员的一个途径。 可取代 diff 和 patch 的另一种选择:Cogito 当前很多内核研发者使用 Cogito 来取代 diff 和 patch。他简化了大量内核研发任务,比如更新到最新的版本、创建补丁和应用补丁。 要添加一个文档,运行:
要创建一个补丁,运行:
要应用一个补丁,运行:
|
喜欢本文,那就收藏到: |