讨论:怎样实现应用程序的在线远程升级
最近一直在考虑应用程序的远程升级问题,因为通过远程的方式对于那些不方便直接“接触”的终端设备的升级几乎是必须的。设想:机场里面有几十个乃至上百个嵌入式终端监控器,且挂在天花板上,要对这些终端升级,不可能找一个梯子一个一个地爬上去接上笔记本电脑升级吧?
更可行、更好的方法就是:把笔记本电脑接入终端所在局域网找到相应终端的IP,逐个升级。如果放在flash上的代码是采用bootable这种三合一(bootrom + vxworks + application),则可能造成万一升级失败发生灾难性事故的情况。
所以我的基本思路是:采用TFFS文件系统(我已经在S3C4510B上实现了,包括文件的打开,读写,删除,列目录等,等一段时间我会专门写一篇文章),最终代码分成三个部分,1.bootrom 2.vxworks内核映象 3.应用程序.out。上电时三部分依次启动,升级时只需升级.out部分就可以了。因为TFFS文件系统具有文件写的安全措施,我们就可以不用担心应用程序升级失败了。但我还没有搞清楚关键的一步:从2到3是怎样实现的,也就是说怎样在vxworks起来后运行应用程序。其实这个过程就相当于模拟调试时的downloadable模式。真心希望大家能就此进行讨论,我想如果把这个问题解决了,对大家的水平都会有很大的提高!
先谢了!
关键词: 讨论 怎样 实现 应用程序 在线 远程 升级
[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。
明白了,你的意思是用一个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]
好消息,我用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的大力帮助!谢谢!
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |