ZedBoard学习-为Linux内核打补丁进阶篇
- UID
- 1023229
- 来自
- 中国
|
ZedBoard学习-为Linux内核打补丁进阶篇
前两天刚把补丁用手动的方式实现了,但问题远没有结束……今天谁知又遇到个补丁要打,而且同样的结果:打不上!!!那么老办法就开始吧,不过这次比较悲剧的是这个补丁不仅仅就是为了实现一个小功能或修改某项特性,光代码就有上千行,哪有那个闲功夫,一个个去手动修改内核源代码?还记得上次是从内核源代码的角度入手:采取措施让内核支持这项特性;没办法这次只能从补丁入手:采取措施让补丁可以成功使用。正像前篇文章所总结的那样:定位问题以知道是做什么的为基础;解决问题以知道是怎么做的为基础。按照我们整体把握以定位问题,深入细节以解决问题的思路,定位就不用说了,很显然就是补丁和目标源代码不和谐以致不能应用。下面就开始解决问题。一:深入细节: 分析补丁代码与内核源中目标代码,知道它是怎么实现对内核源代码进行修改的 1、补丁代码分析:diff --git a/drivers/Kconfig b/drivers/Kconfigold mode 100644new mode 100755index fe2d57f..8898670--- a/drivers/Kconfig+++ b/drivers/Kconfig@@ -138,4 +138,6 @@ source "drivers/virt/Kconfig"
/*
红色标记代码表示在目标代*/ /*码第138行向下,修改前有4行,修改后有6行*/ source "drivers/devfreq/Kconfig"
/*
蓝色标记代码为目标代码中的原文*/
+source "drivers/pl/Kconfig"
/*
紫色标记代码要在目标代码中对应位置添加或删除的代码*/+ Endmenudiff --git a/drivers/pl/Makefile b/drivers/pl/Makefilenew file mode 100755index 0000000..e9db4d3--- /dev/null+++ b/drivers/pl/Makefile@@ -0,0 +1,4 @@ /*
新建文件为空只有从第0行修改,对应-0 +1
,其它的均为-n +n */++ccflags-$(CONFIG_PMODS_DEBUG) += -DDEBUG++obj-$(CONFIG_LEDBRIGHTNESS) += led-brightness.o2、目标代码分析:[wicoboy@localhost ~]$ cd linux-xlnx/[wicoboy@localhost ~]$ vi drivers/Kconfig打开目标文件,为方便对比在底行模式下用:set nu显示出行号,找到source "drivers/virt/Kconfig"所在行139 source "drivers/remoteproc/Kconfig140141 source "drivers/rpmsg/Kconfig"142143 source "drivers/virt/Kconfig"144145 source "drivers/devfreq/Kconfig"146147 source "drivers/extcon/Kconfig" //从147到158是我们手上拿到的补丁生成后,148 //该文件又被修改的内容.
正是因为这上149 source "drivers/memory/Kconfig" // 个原因导致补丁不能顺利打150151 source "drivers/iio/Kconfig"152153 source "drivers/vme/Kconfig"154155 source "drivers/pwm/Kconfig"156157 source "drivers/pmods/Kconfig"158159 endmenu二、解决问题:既然弄懂了补丁是怎么实现其功能的,那么问题就迎刃而解了。新的解决方案就出来了,将补丁中的@@ -138,4 +138,6 @@ source "drivers/virt/Kconfig" source "drivers/devfreq/Kconfig" +source "drivers/pl/Kconfig" + Endmenu修改为:@@ -143,4 +143,6 @@ source "drivers/virt/Kconfig" source "drivers/devfreq/Kconfig" +source "drivers/pl/Kconfig" + source "drivers/extcon/Kconfig"来源:wicoboy的博客 |
|
|
|
|
|