什么?eCos也要打补丁(put a patch)?
看到文章标题时,我估计有人很惊讶,并且会发出上面类似的问题。也许你听说过windows打补丁而且关于这个还是出了名 的,听说过linux打补丁而且有专门的diff和patch命令。确定的是,在eCos中,补丁同样存在。
本文就来说说eCos中补丁的那些事以及怎样给eCos打补丁。
补丁(patch)是何物?
一个补丁就是一个文本文档,这个文档包含了在两个不同版本的源代码树之间的变化。补丁是通过diff应用程序来创建的。
为了正确地打上一个补丁,你需要知道这个补丁是从哪个基础版本产生出来的以及这个补丁将要把目前的源代码树变化到什么新的版本。这些信息或者会出现在补丁文件的原数据中,或者可能从文件名中推断出来。
关于eCos的补丁
eCos的一些bug修正、一些新组件、一些组件的改进或缺陷修正可能先是以patch的形式发布,等稳定后才归到eCos CVS代码仓库中。
eCos本来提供了一个专门用来提交patch的邮件列表ecos-patches,不过现在已经废弃不用了。现在所有的eCos补丁以附件的形式提交到Bugzilla系统(Bug Management System)。也可进入eCos邮件列表ecos-bugs,查看到一些patch。该邮件列表是以年份进行归档的。
显然,我们可以从eCos的 Bugzilla系统或ecos-bugs邮件列表中获取到一些有用的东西,如最新缺陷的修正patch等等。对我们最有用的就是可能可以从中获取到其他eCos开发者贡献的eCos CVS仓库中没有的驱动组件或其它功能组件。比如,目前为止,eCos CVS仓库中是没有stm32看门狗驱动的,但在Bugzilla系统中则可以找到该驱动组件。
获取eCos的补丁文件
下面以获取stm32看门狗驱动patch为例进行说明。有两种方法可获知是否存在stm32看门狗驱动patch。
第一种也是较为常用的方法是在Bugzilla系统中通过输入关键字进行搜索,如下图所示。
每个patch都分配了1个Bug ID, stm32看门狗驱动patch对应的Bug ID为:1001721。点击该ID进入该patch详细内容页面,找到Attachments表格,如下图所示:
右击Watchdog device driver,选择链接另存为,则可以下载该补丁文件了。可点击右边的Details或者Diff查看细节。这时获取的补丁文件名为:stm32_watchdog.patch。
第二种方法是从ecos-bugs邮件列表中进入,它也提供了搜索功能,但根据我使用的感受来看,其搜索不如Bugzilla系统强大,同样输入stm32 watch关键字,在ecos-bugs邮件列表中是搜索不到的。因此,如果采用这种方法,预先知道存在该patch才好使。
对于stm32看门狗驱动patch,存于ecos-bugs archive date index for 2013归档中,如下图所示:
上图中,随便点击红色框中的一个都可以进入该patch邮件列表具体内容中。找到下图所示的内容:
同样,右击上述链接,然后选择链接另存为,则可以下载该补丁文件。
为你的eCos打补丁
获取到补丁文件后,则可以为eCos打上该补丁了。 如果你还不会linux下的diff和patch命令,建议先了解下这两个命令的使用,文章链接:http://velep.com/archives/668.html
首先把补丁文件到拷贝到ecos/packages目录下。eCos所有补丁都是基于该目录的。这通过补丁文件的头就可以看出来:
--- /home/iko/Desktop/dizajn/SW/refference_20130103/ecos/packages/devs/watchdog/cortexm/stm32/current/cdl/watchdog_stm32.cdl 1970-01-01 01:00:00.000000000 +0100
+++ devs/watchdog/cortexm/stm32/current/cdl/watchdog_stm32.cdl 2013-01-03 16:07:17.712502000 +0100
然后操作如下:
patch -p0 <stm32_watchdog.patch # 打stm32 watchdog驱动补丁
具体操作如下图所示:
至此,我们就完成了打补丁操作,在ecos/packages/devs/watchdog/目录下可看到stm32的看门狗驱动了。