Linux 内核补丁和开发源代码树

Linux 内核补丁和开发源代码树

我们使用的是linux3.12,它的led驱动程序有一个bug,在更高版本的Linux中得到了修复。我们看到 Linux 3.15 中的驱动程序发生了变化Linux交叉参考

现在我的问题是如何找到引起此更改的补丁?

另一个问题是如何访问开发内核源代码树,例如 kernel-3.14.18 树?

答案1

我怎样才能找到引起这种变化的补丁

使用cgit,走这里并点击。导航到您要查找的文件,然后单击日志。然后您可以看到文件的更改。

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/log/drivers/leds/led-core.c

要下载 Linux 内核源代码,请访问 kernel.org 并选择您的版本。

不稳定的开发树在这里: https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/

答案2

获取内核源代码

克隆稳定的内核树:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

改成这样:

cd linux-stable

检查已修复错误的标签:

git checkout v3.15

您知道您要查找的文件drivers/leds/led-core.c以及错误已修复 (3.15) 和损坏的位置 (3.12),因此您可以通过几种方法从这里继续。

责备

你可以使用git blame drivers/leds/led-core.c,但我发现这个视图很混乱。

我更喜欢tiggit 的基于 Curses 的界面,所以只需:

tig blame drivers/leds/led-core.c

并以交互方式查看文件的每一行和那些提交。您可以使用箭头键上下移动,然后使用进入。退出q

您可以在 LXR 中的第 42-46 行看到链接到的补丁:

2014-02-04 00:11 Stefan Sørensen 8d82fef         /* never on - just set to off */
2014-02-04 00:11 Stefan Sørensen 8d82fef         if (!delay_on) {
2014-02-04 00:11 Stefan Sørensen 8d82fef                 __led_set_brightness(led_cdev, LED_OFF);
2012-03-23 15:02 Bryan Wu        a403d93                 return;
2014-02-04 00:11 Stefan Sørensen 8d82fef         }

所以你正在寻找8d82fef.按进入越过其中任何一行,您就可以打开补丁。

这对于包含大量最新补丁的较大文件更有用。

日志

您需要一个日期范围,因此查看git log“好”和“坏”标签,3.15 和 3.12 的合并为:

commit 1860e379875dfe7271c649058aeddffe5afd9d0d
Author: Linus Torvalds <[email protected]>
Date:   Sun Jun 8 11:19:54 2014 -0700

    Linux 3.15

commit 5e01dc7b26d9f24f39abace5da98ccbd6a5ceb52
Author: Linus Torvalds <[email protected]>
Date:   Sun Nov 3 15:41:51 2013 -0800

    Linux 3.12

因此,2013 年 11 月 2 日至 2014 年 6 月 8 日之间的任何内容都是您的补丁。

查看有问题的文件的日志:

git log drivers/leds/led-core.c

与此日期范围匹配的唯一补丁是最新补丁:

commit 8d82fef8bbee588d071372eb02439d2053b4bfe4
Author: Stefan Sørensen <[email protected]>
Date:   Tue Feb 4 00:11:42 2014 -0800

    leds: Turn off led if blinking is disabled

补丁

现在,您已经使用这两种方法之一来查找解决问题的提交,并与其祖先相比,获取该提交的补丁:

git diff 8d82fef8^ 8d82fef8 drivers/leds/led-core.c

如果需要,您可以将其传输到文件:

git diff 8d82fef8^ 8d82fef8 drivers/leds/led-core.c > led-blinking-fix.patch

现在您有一个补丁可以应用于您的内部内核树。

相关内容