基于VxWorks的产品映象设计

2007-03-09 19:03:27来源: 互联网
摘 要: 本文分析了VxWorks的映象特点,设计了几种VxWorks下产品映象的构造方案,并指出了这些构造设计的应用场合。 关键词: VxWorks;映象;启动代码 VxWorks是目前占垄断地位的实时操作系统,在许多领域获得广泛应用,但其产品映象设计却一直是令设计工程师头疼的问题。本文在实践验证的基础上,讨论了基于VxWorks操作系统上的产品映象设计技术,具有很强的实用性。 [b]VxWorks的映象分析 [/b] VxWorks映象内容包括:代码段(Text segment)、数据段(Data Segment)和符号起始块段(BSS Segment)。其中,代码段指可执行的指令集合;数据段指已经初始化的全局和静态变量;符号起始块段是未初始化的全局和静态变量,ANSI C/C++中要求这些变量初始化为零。 VxWorks映象按类型分为:可下载的映象(Loadable images)、基于ROM的映象(ROM-based images)和ROM驻留映象(ROM-Resident images)三种。Loadable images一般用于调试,ROM或Flash中的启动代码BSP打通调试通道后,将其从PC机上装入RAM运行。ROM-based images整个映象在ROM或Flash中,由BSP从ROM或Flash中装载整个映象到RAM中运行,并分为压缩和非压缩方式。ROM-resident images则只拷贝VxWorks的data和bss部分到RAM中运行,运行效率低。 基于VxWorks的产品映象设计 本文bootable VxWorks映象即为ROM-based images,downloadable应用模块对应Loadable images。VxWorks最终产品映象一般烧录在Flash中,但由于Flash容量有限,并且为了动态更换程序方便,有时需要使用两片Flash。其中,第一片小容量的Flash仅作为启动和下载程序功能,采用插件式,以便替换;第二片大容量的Flash存放用户应用代码,多采用贴片方式。具体VxWorks的产品映象构造可使用以下四种技术方案。 方案一 Flash中存放BOOT+OS+ APPLICATION代码(Tornado图形环境下选项为bootable映象,rules=VxWorks_rom)。 在Flash中的 BOOT启动后,就将OS装入RAM,跳到OS入口点,OS执行,并由OS最终调起用户应用程序。这种设计最为简洁,只需一片Flash装载程序。缺点是,采用插件Flash容量很小,仅适合程序不大的场合;而采用贴片方式的Flash,则有一个头疼的程序烧写问题。 方案二 第一片小容量Flash放BOOT代码;第二片大容量的Flash放OS+APPLICATION代码(Tornado图形环境下选项为bootable映象,rules=VxWorks)。 由VxWorks的Loadable images启动过程可知,第一片Flash会将BOOT code拷贝到RAM_HIGH_ADRS为起址的RAM空间,BOOT code则将OS拷贝到RAM_LOW_ADRS为起址的RAM空间,并跳到OS入口点,即RAM_LOW_ADRS执行。所以这种方法是在第一片Flash启动后,接着将第二片Flash中保存的OS+APPLICATION映象拷贝到RAM的RAM_LOW_ADRS " RAM_HIGH_ADRS之间,然后跳到RAM中的RAM_LOW_ADRS地址处即OS入口点执行。 方案三 第一片小容量Flash放BOOT代码;第二片大容量的Flash放BOOT+OS+APPLICATION(Tornado图形环境下选项为bootable映象,rules=VxWorks_rom)。 第一片BOOT启动后,其代码执行的最后一句跳至第二片Flash的启动代码romInit()处执行。第一片Flash代码用来将程序下载到第二片Flash中,正常情况下则是简单地启动第二片Flash中已有的程序。在做第二片Flash中的BOOT+OS+APPLICATION映象时,需要将BSP中config.h文件的ROM_BASE_ADRS参数修改为第二片Flash的基址,表示基于第二片Flash启动运行。这里第二片Flash执行并不等同复位CPU,只是又执行了一次与第一片Flash中上电复位后内容类似的初始化代码并新启动了一个OS,这个OS重新接管了SDRAM以及CPU的所有寄存器等,而第一片Flash中代码不再执行。 下面提供一种方法,通过第一片Flash中的代码,可以将远程PC机上编译好的二进制可执行文件 rom.bin(含有BOOT+OS+APPLICATION)ftp到第二片Flash: /*(1)将PC ftp Server上的二进制可执行文件rom.bin(含有BOOT+OS+APPLICATION)ftp到target的SDRAM缓冲区buf中*/ if (ftpXfer ("server", "fred", "magic", "", "RETR %s", "/usr/appl", "rom.bin", %26;amp;ctrlSock, %26;amp;dataSock) == ERROR) return (ERROR); while ((nBytes = read (dataSock, buf, 5*1024)) > 0) { buf = buf + nBytes; TotalNum = TotalNum + nBytes; } close (dataSock); if (ftpReplyGet (ctrlSock, TRUE) != FTP_COMPLETE) status = ERROR; if (ftpCommand (ctrlSock, "QUIT", 0, 0, 0, 0, 0, 0) != FTP_COMPLETE) status = ERROR; close (ctrlSock); /*(2)将ftp到SDRAM中的内容写入第二片Flash中*/ writeFlash2(buf-TotalNum,FLASH2BASE,TotalNum); /*(3)第一片Flash执行的最后一行代码是跳转到第二片Flash中第一条语句执行*/ FUNCPTR entry = (FUNCPTR)(FLASH2BASE+0x100); go (entry); 方案四 第一片小容量Flash放BOOT+OS+LOADER代码(Tornado图形环境下选项为bootable映象,rules=VxWorks_rom);第二片大容量Flash放APPLICATION(Tornado图形环境下选项为downloadable应用模块且可重定位,rules=objects),此片Flash必须有文件系统。 第一片Flash中是一个完整的产品映象,等同于BOOT+OS+APPLICATION,LOADER就是一个简单的APPLICATION,利用VxWorks提供给用户的目标模块加载器loadlib来完成LOADER功能。在第一片Flash启动运行到LOADER时,由LOADER的loadModule()函数将第二片Flash的APPLICATION文件动态加载入RAM,并与OS连接为可直接执行的映象,然后用symFindByName()找到应用代码文件appl.o中用户应用入口点"ApplEntry",最后跳到应用入口函数执行。 第一片Flash中的LOADER代码如下: FUNCPTR StartEntry; fd = open ("/Flash2/appl.o", O_RDONLY,0); loadModule(fd, LOAD_ALL_SYMBOLS); symFindByName(sysSymTbl,“ApplEntry”,(char **)%26;amp;StartEntry,%26;amp;Type); (*StartEntry)( ); 其中,(1)loadModule(int fd,int loadFlag)函数从指定的文件fd中装载目标模块,并将Text、Data、BSS段放入目标内存池中;(2)SymFindByName(SYMTAB_ID symTblId, char* name, char** pValue, SYM_TYPE* pType)从符号表中搜寻与指定符号名匹配的符号,并将值考入pValue和pType中。 VxWorks产品映象设计方案比较 以上方案中,第一种设计只适合代码小的产品映象;第二、三、四种适合大容量代码的映象设计。第二种设计启动最快,但用户可修改性差,不灵活。第三种设计启动两次,速度慢,但可以做到动态远程更新包括BSP在内的整个第二片Flash中的映象。第四种必须在第二片Flash中有闪存文件系统TrueFFS,appl.o以文件形式存放其中,此设计最为复杂,但在增加远程程序下载更新功能方面十分方便。以上映象构造方案在实际中都得到成功验证,应用设计人员可以按照实际要求灵活选择。 参考文献 1 VxWorks Programmer’s Guide,5.4[M].WindRiver ,Inc. 2 Tornado User’s Guide,2.0[M].WindRiver ,Inc. 3 孔祥营,柏桂枝.嵌入式实时操作系统VxWorks及其开发环境Tornado[M].北京:中国电力出版社,2002.
编辑: 引用地址:http://www.eeworld.com.cn/designarticles/embed/200703/9227.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部

小广播

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved