这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 讨论:怎样实现应用程序的在线远程升级

共9条 1/1 1 跳转至

讨论:怎样实现应用程序的在线远程升级

菜鸟
2002-10-10 19:27:23     打赏
最近一直在考虑应用程序的远程升级问题,因为通过远程的方式对于那些不方便直接“接触”的终端设备的升级几乎是必须的。设想:机场里面有几十个乃至上百个嵌入式终端监控器,且挂在天花板上,要对这些终端升级,不可能找一个梯子一个一个地爬上去接上笔记本电脑升级吧?   更可行、更好的方法就是:把笔记本电脑接入终端所在局域网找到相应终端的IP,逐个升级。如果放在flash上的代码是采用bootable这种三合一(bootrom + vxworks + application),则可能造成万一升级失败发生灾难性事故的情况。   所以我的基本思路是:采用TFFS文件系统(我已经在S3C4510B上实现了,包括文件的打开,读写,删除,列目录等,等一段时间我会专门写一篇文章),最终代码分成三个部分,1.bootrom 2.vxworks内核映象 3.应用程序.out。上电时三部分依次启动,升级时只需升级.out部分就可以了。因为TFFS文件系统具有文件写的安全措施,我们就可以不用担心应用程序升级失败了。但我还没有搞清楚关键的一步:从2到3是怎样实现的,也就是说怎样在vxworks起来后运行应用程序。其实这个过程就相当于模拟调试时的downloadable模式。真心希望大家能就此进行讨论,我想如果把这个问题解决了,对大家的水平都会有很大的提高!   先谢了!



关键词: 讨论     怎样     实现     应用程序     在线     远程     升级    

菜鸟
2002-10-11 01:34:00     打赏
2楼
[quote][b]以下是引用[i]xiaohua在2002-10-10 16:57:59[/i]的发言:[/b] 是否可以这样: BOOTROM+VxWorks Image( coff/elf )。 Target启动后,从Flash Rom的某一位置把VxWorks Image读到 Ram中开始执行,在BOOTROM中写一段擦写Flash Rom的程序,在升级的时候使用。 我在一个uClinux系统上看到的BOOTLOAD就是这么做的。 [/quote] 你所指的vxworks Image是只包括vxworks内核和应用程序代码吗? 这样的image该怎样生成? 好象tornado2.0只能生成bootable和downloadable两种格式的映象,不是三合一,就是赤裸裸的应用程序代码.out。

菜鸟
2002-10-11 04:12:00     打赏
3楼
明白了,你的意思是用一个bootrom来启动一个带有bootrom的bootable格式的映象文件(三合一)。但我以前试过,好象这样的话系统根本起不来!我明天再试试。另,我找到将.out文件调入内存的系统调用:loadModule( )或loadModuleAt( ),它可以重定位.txt,.data,.bss段,并且可以添加系统symbol表。它可以返回三个段地址,我想.txt应该是程序入口吧(如果错了不要笑哦)?它的功能相当于debug时的download ".out"文件。但现在还是存在怎样从vxworks跳到.txt的问题。我又研究了一下bootConfig.c,它有如下一段代码: “ printf ("\nauto-booting...\n\n"); if (bootLoad (BOOT_LINE_ADRS, &entry) == OK) go (entry); /* ... and never return */ ” 它在bootLoad()中调用了各种启动方式下的内核文件读取,在bootLoadModule()中得到入口地址entry,然后调用go(entry)就进去了,正如它的注释一样:再也不返回了!这就是问题的所在了!接下来我们就无从由此进入我们的.out的.txt了! My god!怎么办呢?[em20][em20]

菜鸟
2002-10-11 19:32:00     打赏
4楼
好消息,我用bootrom引导采用bootable生成的项目文件vxworks居然成功了!想不到我犯了一个大大的错误:我以前生成的Image是vxworks_romCompress,当然不能成功,而生成的vxworks映象人家明明有说明: “RAM based VxWorks image, linked to RAM_LOW_ADRS. It is loaded into RAM via some external program such as a bootROM. This is the default development image.”唉,差点误人又误己!sorry! 总结一下,远程升级可采用如下方法:1。实现TFFS文件系统,在flash起始地址为bootrom保留一段空间,其余则通通作为TFFS的管理的空间。2。通过FTAG或者其它方法把已经生成的以tffs作为启动方式的bootrom文件写入flash,而vxworks内核+application则以文件的方式写入flash。3。在application中作一个守护程序,如果接收到升级的命令、密码,则将接收到的vxworks内核+application文件通过TFFS写入flash(即使失败系统也不会崩溃,重启就好了)。4。重启。   非常感谢xiaohua,gdtsunyu,AresChen,ryansheng的大力帮助!谢谢!

菜鸟
2002-10-11 20:24:00     打赏
5楼
我的想法是: 1。用bootrom通过网络下载debug时的vxworks内核映象,建立调试环境,bootrom中已经创建了TFFS文件系统。 2。建立一个downloadable的项目,加入通过ftp获取PC机上的vxworks内核+application映象文件的代码。 3。用常规的文件打开,写,关闭完成映象文件写入flash。 4。更改bootrom的启动方式(从网络改为tffs),写入,OK。 是有点麻烦,以后更新就很方便了。不知还有没有更好的方法??我现在还没试过从tffs上启动内核,不知xiaohua兄作过没有? [em21][em21]

菜鸟
2002-10-14 19:13:00     打赏
6楼
Thank you for your reply, and it's a good advice! But how can I spawn a task [color=#DC143C]linked [/color]with vxworks kernel? Best Regards

菜鸟
2002-10-15 01:51:00     打赏
7楼
这和我们前面讨论的方法非常接近,谢谢!

菜鸟
2002-10-18 18:05:00     打赏
8楼
我马上试试,非常感谢vxfree兄的帮助!每次都能从你那儿学到一些新东西,真是太高兴了![em27][em27]

菜鸟
2002-10-18 22:03:00     打赏
9楼
成功啦!超级终端打印出“ld_test_obj called, param=beef”的信息。 厉害!!!vxfree兄,我对你的佩服如滔滔江水奔流不息,如黄河泛滥一发不可收拾□□□□□(此处省掉5000字)。   言归正传,现在远程升级应用程序的基本方法可以归纳如下。 第一种方法:采用bootrom + vxworks + application   1。创建tffs文件系统。   2。创建bootable型的一个项目,在usrAppInit()中加入vxfree兄的test代码(对入口程序名自行更改),生成vxworks映象。   3。创建downloadable型的一个项目,这就是你的application!生成.out文件。   4。通过网络将这两个文件写入已经创建了tffs文件系统的flash。   5。更改bootrom的引导行(见前面的帖子),使其从tffs引导系统。   6。通过编译器烧写bootrom.hex到bootrom芯片(或者和vxworks共用一片flash但要用tffsBootImagePut()来完成)。   7。重启,OK。   以后直接通过网络更新tffs下的.out文件,重启就完成升级。这种方法的缺点在于占用vxworks空间较大,光vxworks映象就有1M多点,bootrom又是1百多K,优点在于启动速度快! 第二种方法: vxworks_romCompress + application 1。创建tffs文件系统。   2。创建bootable型的一个项目,在usrAppInit()中加入vxfree兄的test代码(对入口程序名自行更改),生成vxworks_romCompress 映象。 3。创建downloadable型的一个项目,这就是你的application!生成.out文件。 4。通过网络用tffsBootImagePut()来将vxworks_romCompress写入已经创建了tffs文件系统的flash,而.out文件则直接用文件操作写入。   5。重启,OK。   以后更新应用程序同第一种方法。这种方法的优点在于省空间,缺点是启动慢一点,因为要解压。这种方法我没有试过,只是按理论来说的,应该可行。   问一个问题:如果要把第一种方式的映象进行压缩,然后解压运行,不知该如何进行?? ----------------------------------------------------------------------------- 刚才不知怎么连不上论坛了,害得我帖了N遍。。。。:(

共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]