【解析新特性】300W单路输出工业电源>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 讨论:怎样实现应用程序的在线远程升级

共16条 1/2 1 2 跳转至

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

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



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

菜鸟
2002-10-11 00:57:00    评分
2楼
是否可以这样: BOOTROM+VxWorks Image( coff/elf )。 Target启动后,从Flash Rom的某一位置把VxWorks Image读到 Ram中开始执行,在BOOTROM中写一段擦写Flash Rom的程序,在升级的时候使用。 我在一个uClinux系统上看到的BOOTLOAD就是这么做的。

菜鸟
2002-10-11 01:34:00    评分
3楼
[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 03:47:00    评分
4楼
我的意思是:bootrom+vxworks vxworks就是bootable project生成。 这样即使要升级内核也是可以的。 例子: bootrom:tornado1.0 vxworks image:tornado2.0 这样是完全可以的。

菜鸟
2002-10-11 04:12:00    评分
5楼
明白了,你的意思是用一个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 06:36:00    评分
6楼
我的做法是, 起两次vxworks, 第一个vxworks是ROMable的, 放在flash中. 第二个vxworks 是RAMable的, 放在DOC或TFFS的flash中, 带有应用程序, 由第一个vxworks将其装入ram. 升级时, 只需升级第二个vxworks.

菜鸟
2002-10-11 15:47:00    评分
7楼
ryangsheng兄,小弟不太明白您的做法,可否再详细一些?谢谢先!

菜鸟
2002-10-11 19:32:00    评分
8楼
好消息,我用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 19:42:00    评分
9楼
恭喜恭喜!

菜鸟
2002-10-11 19:48:00    评分
10楼
问题: 当我把BOOTROM写入Flash中后,怎么样实现“而vxworks内核+application则以文件的方式写入flash”? 我没有成功的做出TFFS,所以请指教! 谢谢!

共16条 1/2 1 2 跳转至

回复

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