Bootrom功能改进经验谈
…… /*下载更新代码并更新*/
break;
……
}
“u”命令的实现流程如图3。除了flashUpdate()之外,其它函数都由VxWorks本身提供。如果更新挫败,则改变JP设置,从备份Boot
rom启动,再次更新Bootrom或运行应用软件。
2 增加重启功能
VxWorks的Bootrom用户命令缺少重启功能,给调试和实际应用带来诸多不便。与Bootrom在线更新方法相同,增加这项功能其实并不难,只要在函数bootCmdLoop()中增加新命令“r”(reset的缩写),在命令中调用系统重启函数sysReboot()即可。SysReboot()由设计师根据系统的不同自行编写。
Switch(*(pLine++)){
……
case 'r'; /*重启系统*/
sysReboot();
break;
……
}
举一反三,还可以根据需要在Bootrom中增加许多自己的命令。完成之后,不要忘了在Bootrom命令解释函数bootHelp()中添加新增命令的用途、用法等帮助信息。
3 自动运行应用软件
在实际应用中,一般将上层软件和VxWorks映象链接在一起,暂且称之为应用程序。默认情况下,当Bootrom运行后,它会倒计时7s,然后从启动参数(BOOT_LINE)指定的路径下载应用程序。但是,因为Bootrom提供了启动参数修改命令,启动参数可能由于某些原因发生更改。例如调试时需要从FTP服务器下载,或者疏忽好奇等,给下次应用带来不少麻烦,很可能出现应用程序下载挫败等故障。
为了保证自动启动总是从固定路径下载应用程序,而不受启动参数的影响,需要修改文件bootConfig.c中的自动启动函数autoboot()。例如,自动启动总是从CF卡读取应用程序。
if(bytesRead ==0){ /*倒计时期间没有输入*/
LoadApplicationImage();/*复制应用程序映象到起始地址为Entry的内存中*/
go((FUNCPTR)ENTRY;/*从Entry地址开始运行*/
}
else{
……
}
Entry是应用程序的入口地址,VxWorks系统中该值是RAM_LOW_ADRS。LoadApplicationImage()函数将应用程序映旬从CF卡复制到起始地址为Entry的内存中,然后将PC指针指向该地址,启动系统。如果在倒计时期间有字符输入,则进入Bootrom的命令界面,用户可以修改启动参数,然后按“@”从启动参数指定的路径下载程序,而不影响调试,但是更改后的参数不会影响下次自动启动的下载路径。
4 多种应用软件的选择
在通信领域,许多产品的硬件平台其实相同,区别在于应用软件。不同的软件塑造出了一个个特色鲜明的产品。如果能够将不同的软件集成到一个硬件平台
《Bootrom功能改进经验谈(第2页)》