我们使用的是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
,但我发现这个视图很混乱。
我更喜欢tig
git 的基于 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
现在您有一个补丁可以应用于您的内部内核树。