【问题标题】:How to patch the Linux kernel?如何给 Linux 内核打补丁?
【发布时间】:2010-11-18 01:56:03
【问题描述】:

我遇到了一个严重的问题。
我手里有什么:

  • Linux 内核 2.6.29,带有 Android Eclair 补丁和一些特定于主板的补丁(作为 .patch 文件)。
  • 带有 Android Froyo 补丁的 Linux 内核 2.6.32。

我想要达到的目标:

  • 我想将板特定补丁与 Android Froyo 补丁合并到我的 Linux Kernel 2.6.32。

我不知道如何做到这一点。我尝试将特定于 Board 的补丁直接应用到 2.6.32 内核上,但失败并出现许多错误。

请指导我一些有价值的指示。

谢谢,

【问题讨论】:

  • 有可能你只是做错了(没有办法可以肯定地说没有错误),但错误也很可能是因为补丁根本没有应用 并且需要人类专业知识 - 在这种情况下,您的选择是阅读补丁、研究内核并弄清楚如何手动应用更改,或寻找新方法。
  • 一个很好的起点是内核更改日志,以了解您拥有的部分或全部补丁是否在 2.6.29 之间已在 linux 树中应用和 2.6.32.
  • 嗨,我是 Linux 这个领域的新手,我的意思是打补丁,所以我不太理解你所说的内核变更日志。从哪里可以得到??

标签: android linux-kernel


【解决方案1】:

没有看到具体的错误,很难确定。

Patch 将为每个文件/补丁提供一个“.rej”文件,该文件向您显示它试图做什么以及它发现了什么,导致失败。它通常会告诉您它创建了这些文件,因此您可以修复它们。

您可能会遇到一些更原始的问题 - 在那个补丁中甚至没有找到正确的文件。

这通常是由于路径在补丁文件中的布局不同而导致的,因为它们是您运行它的方式。 (我会试着举个例子)。

如果您查看正在修补的每个文件的每个文件条目,它将具有“源”和“目标”文件名,例如:

/original/src/drivers/mydriver.c /destination/src/drivers/mydriver.c

这意味着 - 例如,您的项目位于名为“项目”的目录中。您当前的工作目录将是“项目”,而您正在修补的文件将是:

/project/src/drivers/mydriver.c

这个补丁可以工作。

比如说,你运行了同一个补丁,但是你当前的工作目录是:

/project/src

当你运行补丁时,它会寻找一个名为:

/project/src/src/drivers/mydriver.c

什么都行不通。

有两种补救措施:

  1. 确保从正确的目录级别运行补丁。

  2. 在补丁中使用“-p{num}”标志 - 这实际上告诉它忽略补丁文件中每个文件名开头的一定数量的目录。

您还可以发布一些您遇到的错误以获得更多帮助...

【讨论】:

    猜你喜欢
    • 2010-09-30
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2014-10-31
    • 2016-08-04
    相关资源
    最近更新 更多