如何使用特定提交来修补内核

如何使用特定提交来修补内核

对于我正在进行的项目,我需要在内核中进行以下提交:

https://git.kernel.org/cgit/linux/kernel/git/bluetooth/bluetooth-next.git/commit/?id=a6ad2a6b9cc1d9d791aee5462cfb8528f366f1d4

基本上只有几行代码。过去,我总是能得到适合用于项目的环境,但这次,这是我们项目中的一个严重错误,需要这个补丁,而且由于它在内核中,我不知道如何处理它。

我是否应该用这个补丁编译一个新内核?我是否可以在 Linux 内核的某个地方替换这些代码行,或者是否有一个补丁程序可以只添加这些代码行?

我自己还没有尝试做任何事情,因为我担心会破坏当前的内核。有人能建议最好的行动方案吗?有人在 Ubuntu IRC 频道上告诉我,我应该将其作为错误报告发布在 launchpad.net 上。问题是,如果这需要超过一周的时间,一些截止日期必须改变,而这是不希望的。

我目前正在运行 Wiley Werewolf 的最新版本。

答案1

在大多数情况下,可能您也需要构建自定义内核。有些模块可以单独构建,但在这种情况下恐怕不行。

但构建内核并不难。Ubuntu 社区帮助和 Wiki 各有一篇有用的文章,涵盖了除补丁应用程序之外的所有内容:

您可以按照这种方式进行操作,如果遇到困难,可以参考上述资源(它们往往更详细):

  1. 安装所需的软件包:

    sudo apt-get install git build-essential fakeroot kernel-package libncurses5-dev libssl-dev
    sudo apt-get build-dep linux-image-$(uname -r)
    

    您可能需要一些其他软件包。我不记得完整的清单。

  2. 克隆 Ubuntu 内核源代码存储库:

    git clone git://kernel.ubuntu.com/ubuntu/ubuntu-wily.git
    

    替换wily为您的 Ubuntu 版本名称。

  3. 在终端中导航到源目录。

    cd ubuntu-wily
    
  4. 找到您需要更改的文件并进行一些编辑或应用补丁。

    • 如果补丁像本例一样以一系列 Git 提交的形式提供,则您可以通过它们的 ID “挑选”它们(在获取源存储库后):

      git fetch git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git
      git cherry-pick a6ad2a6b9cc1d9d791aee5462cfb8528f366f1d4
      
    • 否则,请下载补丁文件并告诉 Git 应用它(如果wget愿意,您可以使用 Web 浏览器下载):

      wget -O bluetooth-unpairing-fix.patch 'https://git.kernel.org/cgit/linux/kernel/git/bluetooth/bluetooth-next.git/patch/?id=a6ad2a6b9cc1d9d791aee5462cfb8528f366f1d4'
      git am bluetooth-unpairing-fix.patch
      
    • 如果补丁文件不是“邮箱”格式(即没有正确提交到内核邮件列表),请使用

      git apply bluetooth-unpairing-fix.patch
      

      代替git am

    如果由于冲突的更改而无法应用补丁,则该补丁与当前内核版本不兼容。您可以尝试使用 Git 的工具“合并”小冲突,但通常您应该尝试找到与您的内核版本兼容的补丁版本。

  5. 跑步fakeroot debian/rules clean

  6. 编辑debian/changelog文件。您只需向版本中添加一些内容即可查看与官方内核的差异。

    例子:

    linux (4.2.0-17.21) wily; urgency=low
    

    改成:

    linux (4.2.0-17.21btpatch) wily; urgency=low
    

    您还会在 debs 和 Grub 中看到此版本号。

  7. 构建内核

    fakeroot debian/rules DEB_BUILD_OPTIONS=parallel=5  binary-headers binary-generic
    

    parellel=5适用于 4 核 CPU 或 4 线程 CPU。您的数字可能不同。它是核心数或线程数 + 1。

    构建内核可能需要很长时间——从 15 分钟到几个小时,具体取决于系统性能!

  8. 您将获得可安装的内核的 deb 包。如果您不喜欢某些内容,可以将其删除。

答案2

补丁是两个版本内核代码之间的差异文件。带有 + 符号的绿色行表示需要添加,带有 - 符号的红色行表示需要删除。

您可以将它们放入 .patch 文件中,然后使用 patch 命令对其进行路径设置。这应该可以帮助您使用 patch 命令:http://www.thegeekstuff.com/2014/12/patch-command-examples/

您应该将其添加到内核源中,然后重新编译内核: http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html

如果您担心内核会损坏,请备份 initrd 和 vmlinuz 文件。当内核损坏时,您可以使用 grub 引导到该内核版本。如果您不应该在构建 PC 上运行内核,并且内核适用于目标 PC,那么您不应该执行“make install”。

相关内容