Loading
新闻中心库存中心价格中心PDF中心图片中心
ICGLE 电子技术支持中心,为电气人员和相关企业提供全面的信息(IC技术\IC库存\IC图片\PDF资料等)服务
总线设计PCB设计单片机DSPARM
JAVA驱动设计C/C++汇编J2EE网络协议中间件技术嵌入式系统无线通信通信网络模拟技术接口电路显示光电传感与控制EDA/PLD
气流体控制电子产品电机及工具通信设备仪器仪表电线电缆建筑电气低压电器高压电器电源工控自动化广电设备医疗器械More..
电源设计仪器仪表技术专递电路图片电子专栏储存技术汽车电子测量测试音响技术家用电器
成功方案市场分析行业标准应用前沿芯片应用综合专区
基于VxWorks的产品映象设计
来源:电子设计应用   作者:
字体大小:[大][中][小]

  VxWorks是目前占垄断地位的实时操作系统,在许多领域获得广泛应用,但其产品映象设计却一直是令设计工程师头疼的问题。本文在实践验证的基础上,讨论了基于VxWorks操作系统上的产品映象设计技术,具有很强的实用性。

  VxWorks的映象分析
  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",
&ctrlSock, &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 **)&StartEntry,&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以文件形式存放其中,此设计最为复杂,但在增加远程程序下载更新功能方面十分方便。以上映象构造方案在实际中都得到成功验证,应用设计人员可以按照实际要求灵活选择。
Upload by 小刘(2006-12-5)
IC
IC
推荐技术文章:
·在VxWorks下实现NAT/NAP....
·VxWorks中的地址映射..
·基于Rhapsody和VxWorks....
·VxWorks中怎么从Flash B....
·基于嵌入式操作系统VxWorks的S....
·基于VxWorks的bootrom代....
·VxWorks for X86的输入....
·基于LPC2104的VxWorksB....
·嵌入式操作系统VxWorks中TFF....
·基于ARM7核处理器VxWorks系....
·VxWorks应用技巧两例..
·基于VxWorks的飞机配电自动化主....
·VxWorks从Flash BOOT....
·VxWorks任务编程中常见异常分析..
·VxWorks体系下PowerPC8....
·VxWorks上WindML对多字节....
·vxWorks在线升级技术..
·基于Vxworks实时操作系统的串口....
·VxWorks网络驱动配置及分析..
·VxWorks中以太网通信报文的粘连....
·VxWorks下基于CS4281声卡..
·VxWorks系统下的RTL8139..
·基于VxWorks的视频采集系统的设..
·VxWorks下UDP协议栈效率的研..
·基于MPC860T的嵌入式通信服务器..
·基于VxWorks嵌人式操作系统的C..
·VxWorks操作系统及实时多任务程..
·基于嵌入式操作系统VxWorks的图..
·利用VxWorks作Internet..
·linux下命令行下编译c程序
·移植U-Boot到AT91RM920..
·一种改进嵌入式Linux操作系统实时..
·Linux内核初始化及启动之用户模式..
·Linux在信息家电(IA)上的应用
·嵌入式Linux的动态扩展技术研究
·基于Linux的嵌入式POS的GUI..
·Linux嵌入式系统与硬件平台的关系
·基于嵌入式Linux的打印控制系统的..
·Linux下获得CPU利用率和内存使..
·擂台战:嵌入式Linux面临图形化挑..
IC
IC

©2007 版权归ICGLE所有   页面执行时间:62.500毫秒